7
votes

Doctrine SetParameter et numéro de paramètre non valide

Après de nombreux essais, je pense que je connais enfin la documentation par cœur. Ensuite, j'ai besoin de votre aide .. Je ne comprends pas pourquoi la doctrine me montre cette erreur:

Numéro de paramètre non valide: Nombre de variables liées ne correspond pas Nombre de jetons p> BlockQuote>

Voici mon code: P>

$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();


3 commentaires

Êtes-vous peut-être appeler $ dB-> où à un moment ultérieur? Cela écraserait la déclaration existante.


Non, c'est la seule utilisation de la déclaration.


Sont $ marque et $ matchsNumber [1] pas null?


4 Réponses :


8
votes

i présume -> SetParameter remplace le précédent.

Pour plusieurs paramètres Utilisez: xxx

Voir la mise à niveau de la doctrine:

À partir de maintenant, les paramètres dans les requêtes sont un arraycollection au lieu d'un tableau simple. Ceci> affecte fortement l'utilisation des paramètres SETPARAMETTRES (), car il n'apportera plus de paramètres> à interroger, mais remplacera réellement les personnes déjà définies. Chaque fois que vous récupérez un paramètre A> (c.-à-d. $ Query-> getParameter (1))

Description de la mise à niveau de la doctrine < p> Peut-être que cela s'applique également à SetParameter?


1 commentaires

J'avais déjà essayé -> SetParameterers (['Marque' => $ Marque, 'Magasin' => '%'. $ MatchsNumber [1]. '%'] Mais aucun changement ..



7
votes

Je suis tellement désolé .. Je viens de trouver mon erreur ... plus tard, comme plus plus tard dans mon code .. Je saisis une nouvelle requête avec mon ancien "$ qb" .. Je suis un tel noob!


0 commentaires

4
votes
$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();

0 commentaires

12
votes

Cela se produit également si vous utilisez accidentellement plus d'un où () code>, qui me est arrivé une fois. xxx pré>

devrait être: p>

$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');


0 commentaires