所以我有以下学说查询:
$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 CI\GroupBundle\Entity\GroupClosure c INNER JOIN c.descendant g WHERE g.id IN(SELECT c2.id FROM CI\GroupBundle\Entity\GroupClosure c2 WHERE c2.ancestor = :groupId ORDER BY c2.ancestor ASC)"
我还转储$ qb和$ qb2的getParameter(),我得到$ qb的空数组和$ qb2上有1个Parameter对象的数组。
我真的不知道我的查询有什么问题,因为我希望我只能绑定1个值。
感谢。
答案 0 :(得分:2)
->setParameter('groupId', $params['rootGroup']->getId())
将其移至$ qb。 getDQL()
返回带参数名称的dql,而不是值。