2015-07-06 9 views
5

Używam DBAL doktryny i mam pewien problem z zapytaniem SQL w wyniku queryBuilder.Doctrine DBAL setParameter() z wartością tablicy

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

I dostać SQL

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

I to jest problem, muszę, że (typu IN (pierwszy, drugi)) został zakodowany jako ciągi znaków, takich jak (typ IN ('pierwszy', "drugi '))

Jak to zrobić z narzędziem do tworzenia zapytań we właściwy sposób?

Odpowiedz

13

Spróbuj z

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

Dziękuję, drugi wariant z \ Doctrine \ DBAL \ Connection :: PARAM_STR_ARRAY działa świetnie dla mnie! –

+0

Pierwszy przypadek nie działa, ponieważ dbal nie owija łańcuchów w tablicę bez typu parametru. –

+0

@SergeyNikolaev masz rację, ale nie byłem w stanie przetestować go, więc napisałem odpowiedź, próbując zmienić definicję tablicy i określając typ parametru – DonCallisto

Powiązane problemy