lee*_*ake 1 symfony doctrine-orm
我想在查询中使用limit和offset,但返回的记录数不匹配.当我没有使用偏移和限制函数获取26个对象,并在设置方法后
->setMaxResults(5)
->setFirstResult(10)
Run Code Online (Sandbox Code Playgroud)
数字是1 ......发生了什么事?
您可能是在DQL中获取加入时遇到的典型问题.这是一个非常简单的问题,并且源于这样的事实:偏移和限制应用于尚未补充的结果集并且必须进行标准化(请参阅有关该结果的第一个和最大结果的文档).
如果要避免此问题(即使使用更复杂的联接或联接结果),您将需要使用ORM DQL Paginator API.使用paginator基本上会触发多个查询:
它的用法很简单:
$query = $em->crateQuery($fetchJoinQuery);
$paginator = new \Doctrine\ORM\Tools\Pagination\Paginator($query);
$query->setFirstResult(20);
$query->setMaxResults(100);
foreach ($paginator as $result) {
var_dump($result->getId());
}
Run Code Online (Sandbox Code Playgroud)
这将从偏移量为20的那一个开始打印100个项目,而不管连接或取结合结果的数量.
虽然这可能看起来效果不佳,但它是处理联接结果问题的最安全的方法,导致明显的混乱偏移和结果限制.您可以通过深入了解ORM Paginator的内部结构来了解如何直接处理.
| 归档时间: |
|
| 查看次数: |
7110 次 |
| 最近记录: |