2015-07-06 14 views
5

Ich benutze Doktrin DBAL und habe ein Problem mit SQL-Abfrage als Ergebnis eines QueryBuilder.Doctrine DBAL setParameter() mit Array-Wert

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

Und SQL

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

bekommen Und das ist das Problem, ich brauche, dass (Typ IN (erste, zweite)) als Zeichenketten wie IN codiert wurde (Typ ('erste', "zweite '))

Wie das mit Query Builder in der richtigen Weise zu tun?

Antwort

13

Versuchen mit

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

Danke, die zweite Variante mit \ Lehre \ DBAL \ Connection :: PARAM_STR_ARRAY funktioniert für mich großartig! –

+0

Der erste Fall funktioniert nicht, da dbal Strings nicht ohne Parametertyp in ein Array einfügt. –

+0

@SergeyNikolaev Sie haben Recht, aber ich war nicht in der Lage, es zu testen, also habe ich eine Antwort geschrieben, indem Sie Array-Definition zu ändern und Parametertyp – DonCallisto

Verwandte Themen