【发布时间】:2017-06-12 14:47:20
【问题描述】:
我刚刚遇到了一件非常烦人的事情。我有一个 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 并将其直接执行到数据库中时,我得到 529 个对象。但它是同一个查询!
有人知道这两个结果之间出现这种差距的原因吗?
编辑:发现了一些东西。当我进行计数查询时,我得到 203 个结果,但是当我做一个正常的查询并计算结果时,我得到 192 个结果。这是否意味着学说有一个最大变量或其他东西?
编辑 2:这似乎是我的应用程序特有的继承问题。再次感谢您帮助我。
【问题讨论】:
-
你做过的sql查询是什么?
-
这是因为leftJoins。如果您仔细查看 db 查询结果,您会发现包含
a的行多次出现,而连接的内容不同。尝试将GROUP BY a.id添加到您的本机 sql 查询中(这将消除大量数据,但应该归结为 192 个结果,因为来自 a 的每个条目只会显示一次)。 -
感谢您的回复。我发现了一些可能会导致某些事情的东西。当我执行 sql count() 查询时,我得到 203 个结果。但是当我执行 getResult() 和 php count() 时,我得到 192。这真的很奇怪,实际上我有点迷路了。
标签: symfony doctrine-orm