Доктрина: множественный (где ИЛИ, где) запрос? - PullRequest
12 голосов
/ 26 февраля 2010

У меня проблемы с созданием довольно простого запроса с помощью Doctrine ...

У меня есть два массива ($ стран, $ городов), и мне нужно проверить, совпадают ли значения записей базы данных с любыми из них. Я ищу что-то вроде:

->whereIn('country', 'city', $countries, $cities)

... где "страна" - ГДЕ для $ стран, а "город" - ГДЕ для $ города.

Я мог бы разделить их, но в необходимом запросе есть много других условий, поэтому это невозможно. Результирующий SQL, который мне нужен, будет:

SELECT ... 
WHERE ... 
AND ...
AND ... 
AND ('country' IN (1,2,3) OR 'city' IN (7,8,9))
AND ... 
AND ...;

Поэтому можно было бы думать об этом также как о проблеме в скобках. Кто-нибудь знает, возможно ли это с Doctrine DQL? Я просмотрел документацию, но не могу найти направление.

Спасибо

Ответы [ 2 ]

38 голосов
/ 26 февраля 2010

После часа экспериментирования с этой чепухой вот синтаксис, чтобы она заработала.

$q->andWhere('country IN ? OR city IN ?', array(array(1, 2, 3), array(7, 8, 9)));
4 голосов
/ 02 апреля 2012

Почему бы не использовать что-то вроде?

$countryIds=[1,2,3];
$cityIds=[7,8,9];

$q->whereIn('country',$countryIds)->andWhereIn('city',$cityIds);

Кроме того, соедините их вместе для контекста (большинство методов Doctrine возвращают $ this).

см. http://www.symfony -project.org / doctrine / 1_2 / ru / 06-Работа с данными

...