Intereting Posts
Учение. Почему я получаю persistentCollection и пустой массив на ManyToMany? Запретить все файлы, кроме индекса, используя apache строка определения типа не соответствует числу переменных связывания Проверьте, не отключен ли пользователь Проверьте, является ли регулярное выражение допустимым в PHP Flowplayer Secure Streaming с Apache Изменение родительской переменной из дочернего класса Пользовательское сообщение о заполненном статусе уведомления о статусе заказа только для роли пользователя WordPress объединяет запросы Как реализовать лицензирование в загружаемом приложении php Регулярное выражение, позволяющее только целые числа и запятые в строке Символы на строку и строки в текстовом поле Как создать динамическое предложение WHERE mysqli Изменить часовой пояс в Lumen или Laravel 5 Почему codeigniter2 не сохраняет csrf_hash более безопасным способом, например сеансом?

передать массив условий методу doctring expr () -> orx ()

Мне нужно построить DQL с QueryBuilder как это

 [QUERY]... AND WHERE e.type = x OR e.type = Y OR e.type = N [...] 

У меня есть типы в массиве. Как передать этот массив в построитель запросов?

 $qb->andWhere($qb->expr()->orx(CONDITIONS)); 

Список типов будет динамическим, вызов $qb->andWhere в каждом цикле foreach будет делать только больше И WHERE больше нет OR.
Могу ли я хранить многократные выражения orx а затем добавлять их в andWhere ? Любая идея, как решить эту, возможно, общую проблему?

Solutions Collecting From Web of "передать массив условий методу doctring expr () -> orx ()"

Надеюсь, что так, тогда я нашел это:

 $conditions = array('e.type = x', 'e.type = Y', 'e.type = N'); $orX = $qb->expr()->orX(); foreach ($conditions as $condition) { $orX->add($condition); } $qb->add('where', $orX); 

Используя предложение @meze, вы можете упростить код и заменить оператор foreach :

 $orX->addMultiple($conditions); 

Я знал, что tommarow будет лучшим днем. Решение прост. Вы можете сделать массив выражений OR таким образом

 $ors[] = $qb->expr()->orx('e.type = '.$qb->expr()->literal($value)); 

А затем просто добавьте его в метод andWhere () / Where () построителя запросов с помощью метода join так:

 $qb->andWhere(join(' OR ', $ors)); 

@DEY его ответ можно упростить. Нет необходимости в foreach, это также работает:

 $conditions = array('e.type = x', 'e.type = Y', 'e.type = N'); $orX = $qb->expr()->orX(); $orX->addMultiple($conditions); $qb->where($orX); 

Вы также можете использовать функцию call_user_func_array, как это .

Он позволяет вызывать метод, передающий элементы массива в качестве параметров.