Doctrine查询生成器错误的结果

时间:2017-06-12 14:47:20

标签: symfony doctrine-orm

我刚遇到一件非常讨厌的事情。我有一个queryBuilder:

$queryBuilder
    ->select('a')
    ->addSelect('am')
    ->addSelect('m')
    ->addSelect('c')
    ->addSelect('t')
    ->leftJoin('a.articleMedias', 'am')
    ->leftJoin('am.media', 'm')
    ->leftJoin('a.categories', 'c')
    ->leftJoin('a.translations', 't')
    ->add('where', $queryBuilder->expr()->in('a.site', $ids))
;

当我得到结果时,我得到192个对象。 问题是当我转储sql并直接执行它到db时,我得到了529个对象。但这是同样的问题!

有人知道两个结果之间存在这种差距的原因吗?

编辑:找到了一些东西。当我进行计数查询时,我得到203个结果,但是当我做一个正常的结果并计算结果时,我得到192个结果。这是否意味着教义有最大变量或什么?

编辑2:它似乎是我的应用程序特有的继承问题。再次感谢帮助我。

1 个答案:

答案 0 :(得分:2)

最可能的答案是,你没有得到529个对象,而是529行,其中构建了192个对象(因为左边连接)。

将查询直接放入数据库时​​,您必须计算对象的唯一(或SQL:DISTINCT行数。根据您的ID列,将您转储的查询更改为{{1}这个结果应该为你提供192行,与你的192个对象相匹配。

如果没有,请您发布您的查询结果吗?