Создаем модуль на Drupal, быстрый старт
Начнем с api.drupal.org, откройте страницу хука hook_node_presave(), который срабатывает перед добавлением ноды.
http://api.drupal.org/api/drupal/modules!node!node.api.php/function/hook_node_validate/7
Хуки позволяют нам встроить наш код в обычный ход вещей в друпале, добавлять проверки, поля данных, элементы форм и т.д.
Добавляем наш модуль в папку sites/all/modules:
Работа с БД в Drupal 7 - урок 12 - Условия запросов (WHERE, HAVING, LIKE)
Условие запроса позволяет выбрать только те записи, которые подходят под некоторые ограничения, например ноды созданные не раньше двух недель назад, термины в которых есть слово "друпал" и т.д. В SQL мы используем WHERE и HAVING чтобы задать ограничения на запросы SELECT, UPDATE, DELETE. В динамических запросах также реализован механизм для работы с условиями запросов. Этот механизм работает одинаково для всех трех типов запросов: выбора, обновления, удаления.
Концепция условных выражений
Условие содержится в специальном выражение задающем ограничение.
Работа с БД в Drupal 7 - урок 11 - Запросы слияния (MERGE)
Запросы слияния это специальный гибридный тип запросов. Хотя синтаксис для этих запросов был определен в SQL 2003, фактически нет БД поддерживающих этот синтаксис. Однако большинство БД предоставляют альтернативную реализацию использования специфического синтаксиса. Конструктор запросов слияния в Drupal абстрагирует концепцию слияния запроса в структуре объекта, так что объект может быть скомпилирован для каждой БД по разному с учетом ее специфики.
Работа с БД в Drupal 7 - урок 10 - Запросы удаления (DELETE)
Запросы удаления должны использовать конструктор запросов. Они начинаются с функции db_delete():
<?php $query = db_delete('node', $options); ?>
Это запрос на удаление будет удалять записи из таблицы node. Заметьте что не нужно оборачивать имя таблицы в фигурные скобки, конструктор запросов делает это сам. Запросы на удаление используют Fluent API, то есть все методы (кроме execute()) возвращают объект-запрос на себе (все как у запросов на обновление и вставку).
Работа с БД в Drupal 7 - урок 9 - Запросы обновления (UPDATE)
Запросы обновления должны всегда использовать конструктор запросов. Различные БД имееют специфические обработчики для LOB (Large OBject, такие как TEXT в MySQL) и поля BLOB (Binary Large OBject), так что уровень абстракции требуется для индивидуальных драйверов для реализации специфических обработчиков.
Запросы обновления должны начинаться с функции db_update():
Работа с БД в Drupal 7 - урок 8 - Запросы вставки (INSERT INTO)
Запросы вставки всегда должны использовать конструктор запросов. Некоторые БД требуют специальных обработчиков для LOB (Large OBject, такие как текст в MySQL) и BLOB (Binary Large OBject) полей, так что уровень абстракции необходим для индивидуальных драйверов БД для реализации подобных обработчиков.
Запросы вставки начинаются с использования функции db_insert():
Работа с БД в Drupal 7 - урок 7 - Обработка результатов запроса (fetch)
Запрос выборки всегда будет возвращать результат обработки запроса как 0 или больше записей. Есть несколько путей обработать данные результата запроса, которые вы можете использовать по своему усмотрению.
Наиболее часто результаты используются в виде цикла foreach().
Работа с БД в Drupal 7 - урок 6 - Изменение запроса на лету (hook_query_alter)
Важной особенностью динамических запросов выбора является возможность других модулей изменять запросы на лету. Это позволяет другим модулям вставлять их собственные инструкции в запрос, тем самым влияя на поведение запроса или применить изменения во время выполнения запроса, например задать разграничение прав к нодам. Существуют 3 компонента изменения запроса на лету, tagging, meta data и hook_query_alter().
Работа с БД в Drupal 7 - урок 5 - Extenders (Расширения)
Запросы выборки поддерживают расширения (extenders). Расширение дает возможность добавить функциональность к запросу выборки во время выполнения. Эта функциональность может быть дополнительным методом или обрабатывать поведение существующего метода.
Для этого используется в ООП паттерны (design patterns), расширения реализуют таким образом Decorator Pattern. Они прикрепляют дополнительные обязанности к динамическому объекту через предоставления гибкого альтернативного подкласса для метода расширения.
Работа с БД в Drupal 7 - урок 4 - Динамические запросы (SELECT)
Пожалуй мы подобрались к самой интересной части Database API Drupal: динамические запросы. Динамические запросы называются так, потому что Drupal динамически дописывает строку запроса. Все запросы вставки, обновления, удаления или слияния могут быть динамическими. Запросы выборки могут быть как динамическими, так и статическими. Тем не менее, используйте динамические запросы и для запросов выборки.