Дополнительные типы блоков (EBT) — новый опыт конструктора страниц❗

Дополнительные типы блоков (EBT) — стилизованные, настраиваемые типы блоков: слайдшоу, вкладки, карточки, аккордеоны и многие другие. Встроенные настройки для фона, DOM Box, плагины Javascript.

Демо EBT модули Скачать EBT модули

❗Дополнительные типы параграфов (EPT) — новый опыт работы с параграфами

Дополнительные типы параграфов (EPT) — набор модулей, основанный на аналогичных параграфах.

Демо EPT модули Скачать EPT модули

Scroll

Работа с БД в Drupal 7 - урок 9 - Запросы обновления (UPDATE)

02/12/2019, by Ivan

Запросы обновления должны всегда использовать конструктор запросов. Различные БД имееют специфические обработчики для LOB (Large OBject, такие как TEXT в MySQL) и поля BLOB (Binary Large OBject), так что уровень абстракции требуется для индивидуальных драйверов для реализации специфических обработчиков.

Запросы обновления должны начинаться с функции db_update():

<?php
$query = db_update('node', $options);
?>

Создавая этот объект-запрос обновления мы будем изменять одну или более записей в таблице node. Заметьте что фигурные скобки не требуются, конструктор запросов сам обрабатывает имена таблиц.

Объект-запрос на обновление использует fluent API. Так что все методы (за исключением execute()) возвращают объект-запрос на себя позволяя вызывать метод сцепления. Во многих случаях это значит что запрос не будет сохранен как переменная.

Запросы на обновления просты и состоят из набора ключа/значения установленные с набором условий WHERE. Полная структуру WHERE мы детально разберем в одном из следующих уроков и только затронем в этом.

Типичный запрос обновления ниже:

<?php
/* Этот ужасный пример показывает как обновить записи в таблице node */
$num_updated = db_update('node')
  ->fields(array(
    'uid' => 5,
    'status' => 1,
  ))
  ->condition('created', REQUEST_TIME - 3600, '>=')
  ->execute();
?>

Указанный пример эквивалентен следующему запросу:

UPDATE {node} SET uid=5, status=1 WHERE created >= 1221717405;

Пример выше будет обновлять все записи в таблице node созданные за последний час и установит их uid равное 5 и поле status равное 1. Метод fields() принимает один ассоциативный массив, который описывает какие поля нужно обновить и какие новые значения нужно вставлять. Заметьте что в отличие от запросов вставки UpdateQuery::fields() поддерживают только ассоциативные массивы. Также порядок в fields в массиве и порядок в каждом вызываемом методе не имеет значение.

Метод execute() будет возвращать число обновленных запросом строк. Заметьте что обновленных не значит все подходящие под условия WHERE. Если например уже есть ноды со значениями uid=5 и status=1, то они могут подходит под условие WHERE, но они не будут изменены, потому что значения совпадают со значениями в запросе. Поэтому запросы на обновления не всегда правдиво отображают сколько строк с uid=5, status=1 на данный момент.