Doctrine2:Doctrine查询返回原始查询的不同结果?

时间:2011-04-27 21:52:35

标签: doctrine-orm

我过去经常遇到过这种情况,我最后写了一个原始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.ids.id进行分组。每个s.id元素将有3个st.id个元素,符合我预期的18个结果。发生的事情是Doctrine只返回第一个st.id,它是3 s.id的组

知道可能导致这种情况的原因吗?

1 个答案:

答案 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