2015-07-06 21 views
5

Sto usando doctrine DBAL e ho qualche problema con la query SQL come risultato di una queryBuilder.Doctrine DBAL setParameter() con valore di matrice

$builder = $this->getConnection()->getQueryBuilder(); 
$builder->select(['id','name','type']) 
     ->from('table') 
     ->where('id='.(int)$value) 
     ->setMaxResults(1); 
$builder->andWhere($builder->expr()->in('type', ['first','second'])); 

echo(builder->getSQL()); 

$data = $builder->execute()->fetchRow(); 

E ottenere SQL

SELECT id, name, type FROM table WHERE (id=149) AND (type IN (first,second)) LIMIT 1 

E questo è il problema, ho bisogno che (digitare (primo, secondo)) è stato codificato come stringhe come (digitare ('prima', 'secondo '))

Come farlo con il generatore di query nel modo giusto?

risposta

13

Prova con

$builder->andWhere('type IN (:string)'); 
$builder->setParameter('string', array('first','second'), \Doctrine\DBAL\Connection::PARAM_STR_ARRAY); 
+0

Grazie, la seconda variante con \ Doctrine \ DBAL \ Connection :: PARAM_STR_ARRAY funziona alla grande per me! –

+0

Il primo caso non funziona, perché dbal non esegue il wrapping di stringhe nella matrice senza tipo di parametro. –

+0

@SergeyNikolaev hai ragione ma non sono stato in grado di testarlo, quindi ho scritto una risposta cercando di cambiare la definizione di array e specificando il tipo di parametro – DonCallisto

Problemi correlati