问题描述
我是一个 symfony 初学者,我想用这个框架制作一个博客.我使用存储库通过这种方法获取家庭文章:
i'm a symfony beginner and i want to make a blog with the framework. i use repository to get home articles with this method :
public function getHomeArticles($offset = null, $limit = null)
{
$qb = $this->createQueryBuilder('a')
->leftJoin('a.comments', 'c')
->addSelect('c')
->addOrderBy('a.created', 'DESC');
if (false === is_null($offset))
$qb->setFirstResult($offset);
if (false === is_null($limit))
$qb->setMaxResults($limit);
return $qb->getQuery()
->getResult();
}
所以在我的数据库中我有 10 篇文章.在我的 BlogController 中,我使用:
so in my database i have 10 articles. In my BlogController i use :
$blog = $em->getRepository('TestBlogBundle:Article')
->getHomeArticles(3,4);
有了这个,我想要 4 篇文章.但作为回报,我也有一篇文章.
With this i want 4 articles. But in return i also have one article.
有什么问题?
推荐答案
这是一个知道问题,如果您的查询包含 fetch-joined 集合,则需要小心使用 setFirstResult()
和 setMaxResults()
.
This is a know issue where setFirstResult()
and setMaxResults()
need to be use with care if your query contains a fetch-joined collection.
如关于 第一个和最大结果项:
如果您的查询包含指定结果的 fetch-joined 集合限制方法没有像您期望的那样工作.设置最大结果限制数据库结果行的数量,但是在fetch-joined 集合 一个根实体可能出现在多行中,有效保湿少于指定数量的结果.
相反,您可以:
延迟加载
Lazy load
使用分页器(如@Marco 此处所述)
use the Paginator (as stated by @Marco here)
使用 DoctrineCommonCollectionsCollection::slice()
这篇关于学说查询构建器限制和偏移的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!