Как создать запрос, чтобы можно было параметризовать несколько полей в QueryBuilder следующим образом:
$qb->andWhere('(a.field1, a.field2) IN ((1, 1), (2, 2))');
В приведенном выше примере возникает ошибка:
Doctrine\ORM\Query\QueryException : [Syntax Error] line 0, col 84: Error: Expected Doctrine\ORM\Query\Lexer::T_CLOSE_PARENTHESIS, got ','
Я использую Doctrine 2.6.1.
Или, stackoverflow.com/questions/18536190/… О, и это действительно о WHERE IN, попытка сделать два за один раз просто не сработает. Используйте where->(field1..., andWhere->(field2...
Это не повторяющийся вопрос. Возможный повторяющийся вопрос не касается нескольких соответствующих полей.






Думаю, на главную часть о том, как использовать WHERE IN, уже много раз ответили.
Попытка объединить два таких критерия не сработает. Точно так же этот SQL никогда не будет работать:
select * from users where (id, email) IN ((1, 2), ('[email protected]', '[email protected]'));
Вы бы написали это как
select * from users where id IN(1,2) AND email IN('[email protected]', '[email protected]');
Начиная с версии 2.5, я считаю, что вам нужно:
$qb->andWhere('a.field1 IN (:fieldOneValues)')
->andWhere('a.field2 IN (:fieldTwoValues)')
->setParameter('fieldOneValues', $fieldOneValues)
->setParameter('fieldTwoValues', $fieldTwoValues);
Обновлено:
Теперь я лучше понимаю. SQL, которым я поделился, показывает, что я не понимал этого синтаксиса. Со сколькими ценностями вы тестируете? Могли бы вы подойти к этому так же?
(a.field1 = 1 AND a.field2 = 1) OR (a.field1 = 2 AND a.field2 = 2)
Выполнение explain по запросу казалось, что MySQL использует ключи намного лучше с этим методом.
Однако этот запрос может привести к неожиданным результатам. Рассмотрим эти два запроса, которые дадут разные результаты: «select * from tbl WHERE (a, b) IN ((2, 1), (1, 2))» против «select * from tbl WHERE a in (2, 1 ) И b в (1, 2) "
Я в замешательстве. Первый вариант выглядит неверным синтаксисом. Вы ищете OR, а не AND? Вы понимаете группировку скобками?
Вау, глядя на stackoverflow.com/questions/44706196/… Клянусь, я получил ошибку о "двух операндах", когда тестировал это. Хорошо узнавайте что-то новое каждый день. Могу сказать, что за более чем 20 лет разработки я никогда этим не пользовался.
Да, я пытаюсь заставить Doctrine работать с несколькими столбцами для IN, чтобы она не возвращала неожиданных результатов. : D
Доктрина с этим не справится. Я бы просто написал необработанный SQL и использовал RSM, если нужно было возвращать реальные объекты.
Я могу просто пойти с stackoverflow.com/a/44706402/6950851 и перевести его на DQL.
Я все еще пытаюсь осмыслить эту логику ... оба поля находятся в обоих наборах, верно? Не работает, как я ожидал. Извините, этот ответ бесполезен. Удачи! ... о, теперь я понял ... и почему я получил ошибку операнда, а не то, что я ожидал сначала
Возможный дубликат Symfony2 Doctrine querybuilder, где IN