所以我有以下学说查询:
$qb = $this->createQueryBuilder('c')
->select('c','g')
->join('c.descendant', 'g');
$qb2 = $this->createQueryBuilder('c2')
->select('c2.id')
->addOrderBy('c2.ancestor', 'ASC');
if ($params['rootGroup']) {
$qb2->where('c2.ancestor = :groupId')
->setParameter('groupId', $params['rootGroup']->getId());
}
$in = $qb->expr()->in('g.id', $qb2->getDQL());
$qb->where($in);
当我运行getQuery()时,我会收到以下异常消息:
无效的参数编号:绑定变量的数量不匹配令牌数
我抛弃了我的DQL,我得到了以下内容:
"SELECT c, g FROM CIGroupBundleEntityGroupClosure c INNER JOIN c.descendant g WHERE g.id IN(SELECT c2.id FROM CIGroupBundleEntityGroupClosure c2 WHERE c2.ancestor = :groupId ORDER BY c2.ancestor ASC)"
我还将$ qb和$ qb2的getParameter()转储为$ qb的空数组,一个带有1个参数对象的数组在$ qb2上。
我真的不知道我的查询怎么了,因为我期望我只绑定1个值。
谢谢。
->setParameter('groupId', $params['rootGroup']->getId())
将其移至$ qb。getDQL()
返回带有参数名称的DQL,而不是值。