Работа со схемой данных в Drupal

В определенный момент стандартные схемы данных Drupal вас могут перестать удовлетворять, и вы решите добавить свои таблицы в базу данных сайта. Как это сделать по друпальному (а-ля drupal way)?

Для инициализации таблиц в базе данных, которые называются в терминах drupal — схемой данных, используется одноименный API — Schema API.

API предлагает два хука hook_schema и hook_schema_alter. Их нужно определять в файле модуля myModuleName.install.

Hook_schema

Эта зацепка позволяет определить модулю собственные таблицы. Это делается с помощью массива, описывающего свойства полей этой таблицы. Подробнее можно посмотреть в доках schema API, а ещё лучше взглянуть на реальную реализацию этого хука, к примеру в файле /modules/node/node.install.

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

Если модуль уже активен, то вариантов как минимум два:

  1. де-инсталлировать модуль, используя /admin/modules/uninstall (или любым другим способом: используя drush pmu myModuleName или удалив запись из таблицы system). Затем снова включить (и инсталлировать) модуль, чтобы заставить систему выполнить инструкции зацепки hook_schema.
  2. Написать очередной hook_update для вашего модуля с командой drupal_install_schema(‘myModuleName’);
    Это напрямую вызовет hook_schema вашего модуля.

При изменении схемы в процессе совершенствования модуля (добавлении полей, новых таблиц) придется добавлять очередные hook_update с использованием соответствующих команд Schema API.

При деинсталляции модуля drupal вызывает drupal_uninstall_schema для вашего модуля. Т.е. созданные таблицы удаляются из базы.

Hook_schema_alter

Сообщает о изменении схемы (таблиц), созданных другими модулями. Сам хук не создаёт новых полей, но должен быть объявлен в myModuleName.install для поддержания информации об общей схеме в актуальном порядке.

Менять же существующие схемы нужно через hook_update, используя команды schema API. При де-инсталляция модуля, не забудьте удалить ваши поля в таблицах сторонних модулей.

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

Вывод результатов формы в саму форму после submit

Март 2, 2017 г.

Что делают в большинстве случаев после успешного submit данных формы? Вариантов два - либо показывают системное сообщение drupal_set_messge(), либо производят переадресацию на некую страницу с результатами. Первый вариант почти всегда выглядит неказисто, ...

Читать

node_save в hook_node_insert

Апрель 13, 2021 г.

Рассмотрим технику того, как выполнить node_save во время hook_node_insert. Проблема в том, что во время данного хука мы еще находимся в транзакции и выполнить сохранение ноды прямо тут коде функции - не получится. Т.е. следующий код работать не ...

Читать

Возможные проблемы Invalid form POST data

Октябрь 24, 2019 г.

Браузер сообщает об ошибке всплывающим окном вроде того, что на скриншоте. Сообщается, что AJAX завершен неправильно. Но основной симптом - что не работают ...

Читать

Вывод строки запроса построенного в db_select

Апрель 11, 2019 г.

Конструктор запросов db_select позволяет абстрагироваться от движка базы данных. Если запрос довольно сложный, то на этапе тестирования может потребоваться, что называется, убедиться в том, что конечный запрос на языке SQL к базе именно тот, что вы ожидаете. ...

Читать
 

Комментарии к «Работа со схемой данных в Drupal»

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



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