在 Symfony2 中使用 Doctrine DQL 时限制检索的记录数量

Posted

技术标签:

【中文标题】在 Symfony2 中使用 Doctrine DQL 时限制检索的记录数量【英文标题】:Limit amount of records retrieved when using Doctrine DQL in Symfony2 【发布时间】:2011-11-16 06:38:06 【问题描述】:

我有以下疑问:

   $latestcontent = $em->createQuery('
            SELECT c.title, c.content, c.lastedit, a.firstname, a.surname
            FROM ShoutMainBundle:Content c, ShoutMainBundle:Admin a
            WHERE c.author = a.id
            ORDER BY c.lastedit ASC'
            );

我需要做的是限制从该查询返回的记录数量。但是,当我将 LIMIT 10 添加到 SQL 查询时,它会返回此错误:

错误:预期的字符串结尾,得到 'LIMIT'。

所以,我看了一下,发现您可以在代码中添加->limit(10)(在查询之后)。但这会引发这个 php 错误:

Fatal error: Call to undefined method Doctrine\ORM\Query::limit() in C:\wamp\www\src\Shout\AdminBundle\Controller\DefaultController.php on line 22

我做错了什么?

【问题讨论】:

【参考方案1】:

据我所知,目前没有像 LIMIT 这样的 DQL 语句。

你必须使用Query::setMaxResults()。

【讨论】:

成功了,谢谢。这让我有点困惑,因为在这个页面上它说有一个限制命令(这是我正在使用的):doctrine-project.org/documentation/manual/1_1/hu/…。但是你的方法行得通,谢谢:) @mickburkejnr:您在评论中提供的链接适用于 Doctrine 1.2。 Symfony2 使用 Doctrine 2.1,因此您阅读的文档与您使用的版本不匹配。此link 用于 Doctrine 2.1 文档。 @matt 是对的,我提供的链接是 1.1(我不知道)。这是新 Symfony 最让我烦恼的一件事。文档到处都是。 Doctrine 2.6 的链接:doctrine-project.org/projects/doctrine-orm/en/2.6/reference/…(使用 QueryBuilder 时)

以上是关于在 Symfony2 中使用 Doctrine DQL 时限制检索的记录数量的主要内容,如果未能解决你的问题,请参考以下文章

在 Symfony2 中使用 Doctrine DQL 时限制检索的记录数量

如何使用 Doctrine 在 Symfony2 中实现子查询?

Symfony2 / Doctrine2:不要在模式上删除全文索引:更新

Symfony2/Doctrine:如何使用 OneToMany 将实体重新保存为级联新行

Symfony2 - Doctrine - 在实体管理器刷新调用中捕获错误

使用 Doctrine 和 Symfony2 查询多对多关系