Задать параметр как массив int для оператора where в конструкторе запросов dbal, который создает исключение преобразования массива в строку - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь связать параметр: [1, 2] в dbal querybuilder в операторе WHERE IN

Я пытался изменить $qb->expr()->in() на строковую версию, но ничего не изменилось

Создание QueryBuilder

$qb = $this->_em->getConnection()->createQueryBuilder()
            ->select('c.id AS id')
            ->from('category', 'c')
            ->andWhere($qb->expr()->in('c.id', ':categories'))->setParameter('categories', [1, 2], \Doctrine\DBAL\Connection::PARAM_INT_ARRAY);

Исполнение:

$qb->execute()->fetchAll();

Ошибка: Array to string conversion

Ожидает связать массив целых чисел с оператором querybuilder

Ответы [ 2 ]

1 голос
/ 19 апреля 2019

всегда люблю цитировать документацию.

// Example - $qb->expr()->in('u.id', array(1, 2, 3))
// Make sure that you do NOT use something similar to $qb->expr()->in('value', array('stringvalue')) as this will cause Doctrine to throw an Exception.
// Instead, use $qb->expr()->in('value', array('?1')) and bind your parameter to ?1 (see section above)
public function in($x, $y); // Returns Expr\Func instance

source: doctrine querybuilder docs

по существу, если категории не являются числами, вы должны заполнить массивс заполнителями и установите их, или, если они являются числами, вы, вероятно, можете просто использовать пример.

0 голосов
/ 19 апреля 2019

Я предполагаю, что у вас есть сущность, которая имеет ManyToMany или ManyToOne с сущностью категории. Вы можете просто передать массив категорий, и он должен работать, если массив правильно сделан следующим образом:

qb = $this->_em->getConnection()->createQueryBuilder()
            ->select('c.id AS id')
            ->from('category', 'c')
     ->andWhere($qb->expr()->in('c.id',':categories'))->setParameter('categories', $categoriesArray);

В противном случае вы можете попытаться использовать setParameter с вашим массивом идентификаторов, взорвав массив:

qb = $this->_em->getConnection()->createQueryBuilder()
            ->select('c.id AS id')
            ->from('category', 'c')
            ->andWhere($qb->expr()->in('c.id', ':categories'))->setParameter('categories', implode(",",[1, 2]));
...