我过去经常遇到过这种情况,我最后写了一个原始SQL查询来克服它,但我真的想知道为什么会这样。请看下面的陈述
$q = $this->entityManager->createQuery('SELECT um,s,st
FROM Dashboard\Entity\Metric um
JOIN um.stat st
JOIN um.site s
JOIN s.clients c
WHERE c.id = ?1
AND s.competitor = 0
AND s.ignored = 0
AND st.id IN (?2)
GROUP BY s.id, st.id
ORDER BY st.response_field, s.id')
->setParameter(1, $params['c_id'])
->setParameter(2, $statId);
$sql = $q->getSql();
$rs = $q->getResult();
如果我获取$sql
的内容并将其粘贴到mySQL工具中并运行原始查询,则会返回18个正确的结果。
但是,$rs
仅包含3个结果。 $statId
是由逗号分隔的6个数字的字符串:(1,2,3,4,5,6)。所以我按st.id
和s.id
进行分组。每个s.id
元素将有3个st.id
个元素,符合我预期的18个结果。发生的事情是Doctrine只返回第一个st.id
,它是3 s.id
的组
知道可能导致这种情况的原因吗?
答案 0 :(得分:0)
我从IRC得到了我的答案,但是发布在这里,以防它帮助其他人。在2.1版本之前,Smart WHERE IN语句不计划用于支持。
http://groups.google.com/group/doctrine-dev/browse_thread/thread/fbf70837293676fb
但我可以使用查询构建器完成相同的目标。
http://www.doctrine-project.org/docs/orm/2.0/en/reference/query-builder.html