我有一个大型存储库方法,它会在后端生成一个常规查询,我传递给该存储库方法的一些参数是最大结果,第一个结果,按顺序排序和按顺序排序,以便控制要显示的记录总数,分页和记录的顺序。问题是当我在某些配置中时(第4页,最大结果:10,第一结果:40),这应该给我数据库中+1000条记录的第40到第50条记录,但只返回-10条记录来自+1000条记录。
QB代码
....
return $total ? //this is a bool parameter to find out if I want the records or the records amount
$qb
->select($qb->expr()->count('ec.id'))
->getQuery()->getSingleScalarResult() :
$qb//these are the related entities all are joined by leftJoin of QB
->addSelect('c')
->addSelect('e')
->addSelect('pr')
->addSelect('cl')
->addSelect('ap')
->addSelect('com')
->addSelect('cor')
->addSelect('nav')
->addSelect('pais')
->addSelect('tarifas')
->addSelect('transitario')
->orderBy(isset($options['sortBy']) ? $options['sortBy'] : 'e.bl', isset($options['sortDir']) ? $options['sortDir'] : 'asc')
->getQuery()
->setMaxResults(isset($options['limit']) ? $options['limit'] : 10)
->setFirstResult(isset($options['offset']) ? $options['offset'] : 0)
->getArrayResult();
场景1:带有orderBy和数据库
的QueryBuilder
QB:在这种情况下,结果只有一个具有预期数据的实体,但当存在超过1000条记录时,只有一个实体不是10 DB:在这种情况下,我获得了10条记录但是具有相同的实体(来自QB的相同输出但重复了10次)
场景2:QueryBuilder没有orderBy和数据库
QB:在这种情况下,结果符合预期,从+1000条记录中过滤出10条记录
数据库:在这种情况下,结果是预期的10条记录
这种情况下唯一的问题是我无法使用QB订购我的结果。
环境描述
为什么教义/ postgres给我这样的结果?
没有Exceptions,miss配置只会在我使用orderBy
时削减结果提前致谢!
答案 0 :(得分:1)
从评论中将其发布为答案
我猜是因为您是通过左联接选择相关实体的,所以每个主实体(由于一对多的关系)将获得多个结果,但不是以排序的方式,而是在结果集上进行排序时,重复项显示在同一行中,在没有排序的情况下,重复项仍然存在,但与未排序的结果不在同一行中,因此您没有注意到/将它们视为重复记录。
作为您的解决方案,我认为仅选择您的主要实体即可让查询构建器中的A不用选择相关的addSelect(...)
,而当您想从中显示所需的结果时使用lazy loading相关实体。