我遇到了 setMaxResult 和 setFirstResult 的严重问题。
当我试图在没有 setMaxResults 和 setFirstResult 的情况下获得结果时,它可以正常运行,返回所有行。
当我使用offset = 0和limit = 10时,它运行良好,返回10行。
当我使用offset = 10和limit = 10时,它会返回5行(必须是7行)
另一个例子,我使用了offset = 0,limit = 20,它返回了15行。但它必须是17行。
对于offset = 0和limit = 30,它返回了所有17行....为什么这个查询工作得那么糟糕?对于offset = 0和limit 20,它应该返回所有17行......但不是15 ..
代码:
$eligibleCircles = $this->getAllCircles($user);
$results = $this->getEntityManager()
->createQuery(
'SELECT
e
FROM
TestBundle:Event e
LEFT JOIN
e.eligibleCircles eligibleCircles
WHERE
(
eligibleCircles in (:eligibleCircles)
OR
e.owner = :user
)
AND
e.eventStatus = :eventStatus
AND
NOT EXISTS (
SELECT
eh
FROM
TestBundle:EventHidden eh
WHERE
eh.user = :user
AND
eh.event = e
)
AND
e.startDate < :currentDate
ORDER BY e.startDate DESC
'
)
->setParameter('eventStatus', 3)
->setParameter('eligibleCircles', $eligibleCircles )
->setParameter('user', $user )
->setParameter('currentDate', new \DateTime('now') )
->setFirstResult($offset)
->setMaxResults($limitNr)
->getResult();
答案 0 :(得分:1)
对于在查询中加入连接时sql-limit无效,Cerad是正确的。
如果您想在使用Doctrine2时进行分页,可以使用一些有用的工具。
在这里查看文档: http://doctrine-orm.readthedocs.org/en/latest/tutorials/pagination.html
您需要一些额外的代码,但大多数复杂的东西都是为您处理的。 它还需要1或2个额外查询才能找到正确的记录+数据。在您的情况下,这可能是也可能不是问题。