You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Doctrine ORM关联查询列表与统计结果不一致解决方案咨询

问题1:让getList()返回全部9条记录(保留重复数据)

Doctrine 内置的对象水化器默认会按实体主键去重,同一个工作单元(UnitOfWork)中相同 ID 的实体会被合并为同一个实例,所以才会出现原生SQL返回9行、ORM查询仅返回5个对象的情况。
修改方案可选两种:

  • 若不需要返回实体对象,仅需要原始行数据,直接把getResult()改为getArrayResult()即可,会原样返回所有查询到的行数据,不会合并重复实体。
  • 若必须返回实体对象,可在执行查询前添加强制部分加载的提示,关闭实体合并逻辑:
// 在getQuery()之后调用setHint
$result = $qb->getQuery()
    ->setHint(\Doctrine\ORM\Query::HINT_FORCE_PARTIAL_LOAD, true)
    ->getResult();

注意:开启强制部分加载后,返回的实体不会被纳入UnitOfWork管理,后续不能直接通过这个实体做更新操作。


问题2:调整getCount()返回去重后的总条数5

当前的count逻辑统计的是join关联后的所有行数,只要改成统计去重的主表ID即可,修改select部分:

// 把原来的select('count(a.id)')替换为
$qb = $this->createQueryBuilder('a')->select('count(DISTINCT a.id)');

修改后会自动统计满足条件的不重复的film表记录数,和getList()默认返回的去重后实体数量完全一致。


内容的提问来源于stack exchange,提问作者bars

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:06:03