Защо моята заявка 'where in' Doctrine DQL не връща очакваните резултати?

Имам следната DQL заявка:

$queries_query = $this->_em->createQuery('SELECT q FROM \Entities\Query q INNER JOIN q.store s WHERE s.tvRegionId IN (?1)');
$queries_query->setParameter(1, $tv_region_ids);

Връща само резултати, които съответстват на първата стойност в клаузата where. Променливата $tv_region_ids съдържа стойности, разделени със запетая. Ако променя тази променлива на масив, получавам следното съобщение:

Забележка: Преобразуване на масив в низ

Може ли някой да хвърли малко светлина върху проблема ми, моля. Напълно съм объркана.


person Mr B    schedule 17.06.2013    source източник
comment
DQL? никога не съм го чувал :P   -  person Kevin    schedule 17.06.2013
comment
Как изглежда $tv_region_ids?   -  person phpisuber01    schedule 17.06.2013
comment
низ (38) 16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1   -  person Mr B    schedule 17.06.2013


Отговори (1)


Не можете да подадете низ в DQL за заявка от тип IN. Трябва да преминете в масив. Тъй като DQL работи много като подготвени изрази, IN заявката се третира като израз и необработените данни трябва да бъдат предоставени във функцията setParameter.

Пример

$tv_region_ids = [16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1];

$queries_query = $this->_em->createQuery('SELECT q FROM \Entities\Query q INNER JOIN q.store s WHERE s.tvRegionId IN (?1)');
$queries_query->setParameter(1, $tv_region_ids);

Конвертиране на вашия низ (само в случай)

$string = "16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1";

$tv_regions_ids = explode(",", $string);
person phpisuber01    schedule 17.06.2013
comment
Благодаря за вашето предложение, но както споменах в моя въпрос, промяната на $tv_region_ids в масив води до следната грешка: Забележка: Преобразуване на масив в низ в ...library/Doctrine/DBAL/Connection.php на линия 574 - person Mr B; 18.06.2013