Doctrine Query Builder Bug?

时间:2014-04-15 16:30:38

标签: symfony doctrine-orm doctrine query-builder

我在Doctrine遇到了一个问题。我用queryBuilder

构建了以下查询
    $qb = $query = $this->repoLibrary->createQueryBuilder('l');

    $query = $qb
            ->innerJoin('l.productVariant', 'v')
            ->innerJoin('v.product', 'p')
            ->innerJoin('p.taxons', 't', 'WITH', 't.id IN (:array)')
            ->where('l.user = :user')
            ->groupBy('l.id HAVING count(DISTINCT t.id) >= :count')
            ->setParameter('user', $user)
            ->setParameter('array', $s)
            ->setParameter('count', count($taxons))
            ->getQuery();

以下是执行前记录的查询:

  SELECT s0_.id AS id0, s0_.consumed_at AS consumed_at1, s0_.created_at AS created_at2, s0_.updated_at AS updated_at3, s0_.user_id AS user_id4, s0_.variant_id AS variant_id5 
  FROM src_library s0_ 
  INNER JOIN src_variant s1_ ON s0_.variant_id = s1_.id 
  INNER JOIN src_product s2_ ON s1_.product_id = s2_.id 
  INNER JOIN src_taxon_product s4_ 
  ON s2_.id = s4_.product_id 
  INNER JOIN src_taxon s3_ ON s3_.id = s4_.taxon_id
  AND (s3_.id IN (1,4)) 
  WHERE s0_.user_id = 1 
  GROUP BY s0_.id HAVING count(DISTINCT s3_.id) = ? ["1,4",1,2] 

当我直接在MySQL中执行此查询(在插入上面的参数之后)它完美地工作时,返回我正在寻找的2个结果。

但是,当它由Doctrine执行时,它返回一个空数组。

任何想法?

2 个答案:

答案 0 :(得分:1)

在搜索了互联网后,我找到了以下答案。问题出在' IN'条款。正如这里所阐述的那样:

https://groups.google.com/forum/#!topic/doctrine-dev/-_cINyk2dvs

我的问题是由于我正在构建' IN'数组为字符串。

$s = "1,4"

而不是

$s = array(1,4);

这让世界变得与众不同,也让我感觉像是一个n00b。

答案 1 :(得分:0)

您的代码看起来很好,应该可以使用。我看不到你的整个代码,但我猜它返回一个空数组,因为你还没有实际执行准备好的sql语句。你应该调用“getResult()”来做到这一点。

试试这个:

$qb = $query = $this->repoLibrary->createQueryBuilder('l');

$query = $qb
        ->select('l, v.id, p.id')
        ->innerJoin('l.productVariant', 'v')
        ->innerJoin('v.product', 'p')
        ->innerJoin('p.taxons', 't', 'WITH', 't.id IN (:array)')
        ->where('l.user = :user')
        ->groupBy('l.id HAVING count(DISTINCT t.id) >= :count')
        ->setParameter('user', $user)
        ->setParameter('array', $s)
        ->setParameter('count', count($taxons))
        ->getQuery()
        ->getResult();