Conditions
Чтобы добавить предложение WHERE в динамический запрос, используйте метод condition():
$query->condition('bundle', 'article', '=');
Приведенный выше код проинструктирует запрос фильтровать результаты в комплекте статей. Обратите внимание, что имя поля здесь должно быть псевдонимом, созданным методами addField() или addExpression().
Параметры Condition
Метод condition() принимает три параметра:
- $field - поле для сравнения (обязательно).
- $value - значение для сравнения (необязательно, по умолчанию NULL).
- $operator - оператор сравнения (необязательно, по умолчанию ‘=’)
Поддерживаемые операторы
Общие операторы сравнения '=', '<>', '<', '<=', '>', '> =' поддерживаются во всех поддерживаемых типах баз данных.
Используя IN, NOT IN
Операторы IN и NOT IN принимают массив в $value и сравнивают значение поля со значениями массива.
$users = [2,5,17,22]; $query->condition('uid', $users, 'IN');
В этом примере запрос вернет записи, в которых uid равен 2, 5, 17 или 22.
Используя BETWEEN и NOT BETWEEN
Операторы BETWEEN и NOT BETWEEN принимают массив из двух значений для сравнения.
$query->condition('count', [5,10], 'BETWEEN');
В этом примере запрос будет возвращать записи с количеством от 5 до 10.
Используя IS NULL, IS NOT NULL, EXISTS, и NOT EXISTS
По соглашению используйте следующее, а не с помощью метода condition():
$query->isNull($field); $query->isNotNull($field); $query->exists($field); $query->notExists($field);
В то время как условие, такое как $query->condition($field, NULL, 'IS NOT NULL'); должно работать, вышеупомянутое соглашение рекомендуется.
Другие операторы
Другие операторы, такие как BINARY или другие, специфичные для используемой системы базы данных, могут работать или не работать. Помните об этом при разработке модулей, которые могут использоваться в разных системах.
Использование нескольких Conditions
Можно добавить несколько методов condition() для дальнейшей фильтрации запроса.
$query->condition('bundle', 'article', '='); $query->condition('status', 1', '=');
Если существует несколько condition(), как в приведенном выше примере, все условия должны быть выполнены, чтобы запись появилась в результате запроса (то есть условия объединяются в AND).
Совет: Чтобы получить запрос только с условиями OR, используйте одну orConditionGroup.
Группы Conditions
Группы условий можно использовать для создания более сложных выражений where (включая OR) в условии запроса. Существует два типа групп условий:
- orConditionGroup - возвращает объект условий, объединенных с OR
- andConditionGroup - возвращает объект условий, соединенных с AND
Группы условий возвращают объект, который затем можно добавить в качестве условия в запрос.
// Create the orConditionGroup $orGroup = $query->orConditionGroup() ->condition('promoted', 1) ->condition('uid', [2,4,7,22], 'IN'); // Add the group to the query. $query->condition($orGroup);
В этом примере условия для повышен и uid добавляются в запрос WHERE, сгруппированный вместе с OR. Это приведет к WHERE, который выглядит следующим образом:
WHERE (promoted = 1 OR uid IN (2,4,7,22))
При необходимости можно добавить несколько групп orConditionGroup и andConditionGroups. Группы условий могут быть вложенными для более сложных потребностей предложения WHERE.
Дан следующий пример предложения WHERE:
WHERE (a = 1 OR b = 1) AND ((c = 1 AND d = 1) OR (e = 1))
Условия запроса могут быть записаны с группами условий как:
$orGroup1 = $query->orConditionGroup() ->condition('a', 1) ->condition('b', 1); $andGroup1 = $query->andConditionGroup() ->condition('c', 1) ->condition('d', 1); $orGroup2 = $query->orConditionGroup() ->condition($andGroup1) ->condition('e', 1); $query->condition($orGroup1); $query->condition($orGroup2);
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.