2013-04-15 17 views
7

Dopo molti tentativi, penso di conoscere finalmente la documentazione a memoria. Poi, ho bisogno del vostro aiuto .. Io non capisco perché Dottrina mi mostra questo errore:Doctrine setParameter e numero parametro non valido

numero di parametro non valido: numero di variabili vincolate non corrisponde numero di gettoni

Ecco il mio codice:

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

Grazie in anticipo per la risposta.

+6

Forse stai chiamando $ db-> dove in un secondo momento? Ciò sovrascriverebbe l'esistente where-statement. – sroes

+0

No, è l'unico uso di dove dichiarazione. –

+0

'' marque' e '$ matchesNumber [1]' non sono nulli? – cheesemacfly

risposta

7

Sono così dispiaciuto .. Ho appena trovato il mio errore .. Più tardi, come più avanti nel mio codice .. Digito una nuova query con il mio vecchio "$ qb" .. Sono un tale noob!

+0

@sroes era proprio allora :) – Ejaz

+0

Esattamente! Aveva ragione ^^ –

8

Presumo -> setParameter sovrascrive quello precedente.

Per più parametri di utilizzo:

->setParameters(['key1' => $value1, 'key2' => $value2]) 

Vedere Dottrina Aggiornamento:

Da ora in poi, i parametri di query è un ArrayCollection invece di un semplice array. Questo> influisce pesantemente sull'uso di setParameters(), poiché non accoderà più parametri> a query, ma sovrascriverà quelli già definiti. Ogni volta che si recupera un> parametro (es. $ Query-> getParameter (1))

Doctrine Upgrade Description

Forse questo vale anche per setParameter?

+0

Ho già provato '-> setParameters (['marque' => $ marque, 'magasin' => '%'. $ MatchesNumber [1]. '%']);' Ma nessuna modifica .. –

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

Questo accade anche se si utilizza accidentalmente più di uno where(), cosa che mi è successo una volta.

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

dovrebbe essere:

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

Spero che questo aiuti qualcuno.

Problemi correlati