【发布时间】:2014-04-22 18:50:52
【问题描述】:
我试图在我的 DQL 中使用 WHERE ... IN () 子句,但不知何故卡住了。我希望得到三篇文章(WHERE a.id IN (1,2,20))的结果,但结果只有一篇文章(id=1)。这些文章肯定存在于我设置为另一个参数的特定团队中。
SQL(我用于$q = $em->createQuery($sql))如下所示:
SELECT a
FROM AcmeBundle:Article a
WHERE a.team = :team
AND a.id IN (:listOfArticleIds)
ORDER BY a.updated DESC
它创建的 DQL ($q->getSql()) 是这样的:
SELECT a0_.id AS id0, a0_.title AS title1, a0_.description AS description2, a0_.status AS status3, a0_.created AS created4, a0_.updated AS updated5, a0_.contributor_id AS contributor_id6, a0_.company_id AS company_id7
FROM Article a0_
WHERE a0_.team_id = ? AND a0_.id IN (?)
ORDER BY a0_.updated DESC LIMIT 10 OFFSET 0
参数($q->getParameters())如下所示
object(Doctrine\Common\Collections\ArrayCollection)#647 (1) {
["_elements":"Doctrine\Common\Collections\ArrayCollection":private]=>
array(2) {
[0]=>
object(Doctrine\ORM\Query\Parameter)#646 (3) {
["name":"Doctrine\ORM\Query\Parameter":private]=>
string(4) "team"
["value":"Doctrine\ORM\Query\Parameter":private]=>
int(1)
["type":"Doctrine\ORM\Query\Parameter":private]=>
string(7) "integer"
}
[1]=>
object(Doctrine\ORM\Query\Parameter)#520 (3) {
["name":"Doctrine\ORM\Query\Parameter":private]=>
string(13) "listOfArticleIds"
["value":"Doctrine\ORM\Query\Parameter":private]=>
string(6) "1,2,20"
["type":"Doctrine\ORM\Query\Parameter":private]=>
int(2)
}
}
}
有人知道这里可能出了什么问题吗?我很好奇listOfArticleIds 参数的类型,即int(2),但我希望它是string。我已经手动将其设置为 string ($q->setParameter('listOfArticleIds', $listOfArticleIds, 'string')) 但这并没有改变任何东西。
【问题讨论】:
标签: symfony doctrine-orm dql where-in