【问题标题】:How to use the in statement in DQL in Doctrine 2.0如何在 Doctrine 2.0 中使用 DQL 中的 in 语句
【发布时间】:2011-05-19 10:33:14
【问题描述】:

我有以下使用 IN 语句的查询。

$ids = array(1,2,3);
$query = 'select o from Organisation o where o.id in (:ids)';
$this->_entityManager->createQuery($query)
            ->setParameter('ids', implode(', ', $ids))

Doctrine 没有返回任何结果,我认为这是因为 Doctrine 对传递的参数$ids(这是一个数组)所做的转换有问题。

如何让它发挥作用?

【问题讨论】:

    标签: doctrine-orm


    【解决方案1】:

    尝试将数组本身传递给->setParameter(...),而不是将其内爆成字符串。

    【讨论】:

    • 谢谢 Jeremy,我遇到了同样的问题,->setParameter('ids', $ids) 确实有效
    • 谢谢,正是我需要的
    【解决方案2】:

    我用过这个(setParameter 似乎对我不起作用):

    $em->createQuery('SELECT users FROM Entities\User users WHERE users.id IN (:ids)')
    ->setParameters(array('ids' => $ids));
    

    http://redbeardtechnologies.wordpress.com/2011/07/01/doctrine-2-dql-in-statement/

    【讨论】:

      【解决方案3】:

      我解决了这个问题:

      $con = $this->getEntityManager();
      $query = $con->createQuery("SELECT cl
                                  FROM BackendBundle:classifieds cl 
                                  INNER JOIN BackendBundle:locations lo WITH cl.locationId = lo.id
                                  INNER JOIN BackendBundle:municipality mu WITH lo.municipalId = mu.id
                                  WHERE cl.verified = false AND mu.id = ".$munId." AND cl.locationId NOT IN (:ids) ");
      $query->setParameters(array('ids' => $locsIds));
      return $query->getResult();
      

      【讨论】:

      • 如果需要多个参数:$query->setParameters(array('ids' => $locsIds, 'munIds' => $munIds));查询将如下所示:..... WHERE cl.locationId NOT IN (:ids) AND mu.id NOT IN (:munIds)
      【解决方案4】:

      我也在为 IN 语句苦苦挣扎,使用 $query->expr()->in() 构造...

      试试:

      $em->createQuery(“SELECT users FROM Entities\User users WHERE users.id IN (':ids')”)
      ->setParameters(array(‘ids’ => $ids));
      

      我认为 IN() 部分中您的参数周围的简单引号是必要的......

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-20
        相关资源
        最近更新 更多