Doctrine setParameter和无效的参数号

Flo*_*eux 7 php symfony doctrine-orm

经过多次尝试,我想我终于明白了文档.然后,我需要你的帮助..我不明白为什么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();
Run Code Online (Sandbox Code Playgroud)

提前感谢您的回答.

Yes*_*rry 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');
Run Code Online (Sandbox Code Playgroud)

应该:

$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');
Run Code Online (Sandbox Code Playgroud)

希望这有助于某人.


Der*_*fel 8

我认为 - > setParameter会覆盖前一个.

对于多个参数使用:

->setParameters(['key1' => $value1, 'key2' => $value2])
Run Code Online (Sandbox Code Playgroud)

请参阅Doctrine升级:

从现在开始,查询中的参数是ArrayCollection而不是简单数组.这>会严重影响setParameters()的使用,因为它不会追加任何参数>来查询,但实际上会覆盖已定义的参数.每当你检索>参数时(即$ query-> getParameter(1))

学说升级说明

也许这也适用于setParameter?


Flo*_*eux 7

我很抱歉..我刚发现我的错误..后来,就像我的代码后面更多..我用旧的"$ qb"键入一个新的查询..我就是这样的菜鸟!