Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll

Conditions

08/05/2020, by maria

Чтобы добавить предложение 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);

 

Source URL:
Source authors:

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.