В определенный момент стандартные схемы данных Drupal вас могут перестать удовлетворять, и вы решите добавить свои таблицы в базу данных сайта. Как это сделать по друпальному (а-ля drupal way)?
Для инициализации таблиц в базе данных, которые называются в терминах drupal — схемой данных, используется одноименный API — Schema API.
API предлагает два хука hook_schema и hook_schema_alter. Их нужно определять в файле модуля myModuleName.install.
Hook_schema
Эта зацепка позволяет определить модулю собственные таблицы. Это делается с помощью массива, описывающего свойства полей этой таблицы. Подробнее можно посмотреть в доках schema API, а ещё лучше взглянуть на реальную реализацию этого хука, к примеру в файле /modules/node/node.install.
Данный хук вызывает иногда у разработчиков определенные трудности в плане того, в какой момент он вызывается системой. Это происходит только в момент инсталляции модуля в первый раз. При этом происходит создание описанных таблиц физически в базе данных.
Если модуль уже активен, то вариантов как минимум два:
- де-инсталлировать модуль, используя /admin/modules/uninstall (или любым другим способом: используя drush pmu myModuleName или удалив запись из таблицы system). Затем снова включить (и инсталлировать) модуль, чтобы заставить систему выполнить инструкции зацепки hook_schema.
- Написать очередной 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. При де-инсталляция модуля, не забудьте удалить ваши поля в таблицах сторонних модулей.