我在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执行时,它返回一个空数组。
任何想法?
答案 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();