经过多次尝试,我想我终于明白了文档。 然后,我需要你的帮助..我不明白为什么Doctrine告诉我这个错误:
参数号无效:绑定变量数不匹配 令牌数量
这是我的代码:
$qb = $this->em->createQueryBuilder();
$qb->select('m')
->from('Entities\Marque', 'm')
->leftJoin('m.magasin', 'ma')
->where('m.nom = :marque AND ma.nom LIKE :magasin')
->setParameter('marque', $marque)
->setParameter('magasin', '%'.$matchesNumber[1].'%');
$results = $qb->getQuery()->getArrayResult();
提前感谢您的回答。
答案 0 :(得分:11)
如果您不小心使用了多个where()
,这种情况也会发生在我身上。
$em = $this->getEntityManager();
$query = $em->createQueryBuilder()
->from('AppBundle:SomeEntity', 's')
->select('s')
->where('s.foo = :foo')
->where('s.bar = :bar') // <- HERE
->setParameter('foo', 'Foo Value')
->setParameter('bar', 'Bar Value');
应该是:
$em = $this->getEntityManager();
$query = $em->createQueryBuilder()
->from('AppBundle:SomeEntity', 's')
->select('s')
->where('s.foo = :foo')
->andWhere('s.bar = :bar') // <- CHANGE TO andWhere()
->setParameter('foo', 'Foo Value')
->setParameter('bar', 'Bar Value');
希望这有助于某人。
答案 1 :(得分:8)
我认为 - &gt; setParameter会覆盖前一个。
对于多个参数,请使用:
->setParameters(['key1' => $value1, 'key2' => $value2])
请参阅Doctrine升级:
从现在开始,查询中的参数是ArrayCollection而不是简单数组。这&gt;严重影响了setParameters()的使用,因为它不再追加参数&gt;来查询,但实际上会覆盖已定义的参数。每当您检索&gt;参数时(即。$ query-&gt; getParameter(1))
也许这也适用于setParameter?
答案 2 :(得分:7)
我很抱歉..我刚刚发现了我的错误..稍后,就像我的代码稍后一样..我用旧的“$ qb”键入一个新查询.. 我是个菜鸟!
答案 3 :(得分:4)
$qb = $this->em->createQueryBuilder();
$parameters = array('marque'=>$marque, 'magasin'=>'%'.$matchesNumber[1].'%');
$qb->select('m')
->from('Entities\Marque', 'm')
->leftJoin('m.magasin', 'ma')
->where('m.nom = :marque')
->andWhere('ma.nom LIKE :magasin')
->setParameters($parameters);
$results = $qb->getQuery()->getArrayResult();