【问题标题】:Stuck when using WHERE ... IN in my DQL在我的 DQL 中使用 WHERE ... IN 时卡住了
【发布时间】: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


    【解决方案1】:

    listOfArticleIds 应该是一个数组,比如:

    $q->setParameter('listOfArticleIds', array(1, 2, 20))
    

    【讨论】:

    • 非常感谢。我之前内爆了参数,所以我可以简单地省略内爆。
    【解决方案2】:

    您需要将参数作为数组而不是字符串传递,学说会自动将其内爆。

    我记得它只适用于整数数组,但我不确定,我使用 querybuilder:)。

    【讨论】:

      猜你喜欢
      • 2018-01-08
      • 1970-01-01
      • 1970-01-01
      • 2010-09-07
      • 2023-03-09
      • 2014-05-30
      • 1970-01-01
      • 2021-11-08
      • 2022-06-28
      相关资源
      最近更新 更多