Создание условий `или` в запросах через db API Drupal

Конструирование запросов через Drupal DB API необходимо для поддержки совместимости кода для разных источников данных.

Друпал предоставляет и более прямые средства для написания запросов вроде db_query, и никто не может запретить вам применить функционал нативных php библиотек, но использование таких подходов может потребовать переписать код программы при смене одного движка баз данных на другой.

Здесь я хотел бы показать всего лишь один элемент использования конструктора, а именно формирование OR связей между двумя и более условиями.

Рассмотрим простой запрос db_select к таблице node :

Запрос пытается выбрать статьи типа event, которые опубликованы. Оба условия связаны между собой логическим AND.

Как теперь, например, расширить список типов публикаций в условии, добавив туда ‘news’?

DB_OR

Можно воспользоваться специальным конструктором db_or().

Условия внутри этой коллекции связаны по OR. Осталось подставить это в наш прежний запрос.

Полученное условие выглядит так:

Частный случай

В рассмотренном частном случае было бы правильно использовать другую возможность.

В такой записи будет использован SQL оператор IN, что равнозначно объединению по OR для каждого отдельного значения.

Мало букафф? Читайте есчо !

Еще один пример работы с EntityFieldQuery

Декабрь 23, 2020 г.

Время от времени продолжаю кодить под drupal 7, публикую еще один пример для работы EntityFieldQuery, на этот раз с фильтром по полю типа term reference. Основная логика точно такая же как и при работе с data полями (где у нас хранятся тексты или ...

Читать

Как изменить длину поля (max length) после создания, сохраняя данные

Май 15, 2018 г.

Друпал не позволяет менять длину текстового поля после создания. Функция field_update_field также нам не поможет - будет сгенерирована соответствующая ошибка, что поле уже содержит данные и изменить его длину нельзя. Это можно проделать вручную, зная ...

Читать

Error: Class 'Aws\S3\StreamWrapper' not found (Drupal 7)

Август 29, 2022 г.

При обновлении модуля s3fs с ветки 7.x-2.x -> 7.x->3.x друпалу не удаётся найти указанный класс. Все необходимые шаги по апгрейду сделаны, как описано в readme.txt модуля. Это проблема инициализации библиотеки awssdk в s3fs_libraries_info(). Drupal ...

Читать

Использование cache API Drupal 7

Май 14, 2019 г.

Изучение API удобно начинать с шаблонов кода, которые демонстрируют технику использования. Пример логики использования/создания элемента кеша [crayon-6adba86946074403093495/] Обратите внимание на дополнительные скобки вокруг $cache = cache_get($cache_id). ...

Читать
 

Комментарии к «Создание условий `или` в запросах через db API Drupal»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: