Когда вы создаете новую таблицу в hook_schema()
, должна ли эта таблица также добавляться в hook_update_N()
? Или есть какой-то трюк или что-то, что я пропустил, чтобы databae-updates автоматически добавляли таблицы?
Документация о hook_update_N () ничего не объясняет о введении новых таблиц, тогда как документацияhook_schema()
говорит:
Таблицы, объявленные этим хуком, будут автоматически созданы при первом включении модуля и удалены при удалении модуля.
(Изюминка моя)
И если да, то как лучше всего не дублировать определения схемы для новой таблицы как в hook_update_N (), так и в hook_schema (). Просто ссылаясь на схему следующим образом:
function hook_update_N(&$sandbox) {
$schema = hook_schema();
$name = "foo";
$table = $schema["foo"];
db_create_table($name, $table);
}
Кажется, работает, но при повторном изменении таблицы произойдет сбой, если пользователь запустит обновления и запустит два или более hook_update_N (). В конце концов: первый hook_update_N уже установит правильную базу данных, а второй hook_update_M () попытается добавить / изменить / изменить столбцы, которые уже были обновлены.
Как вы справляетесь с этим?
Ответы:
Так что просто скопируйте с сайта drupal.org. Вам также необходимо добавить определение схемы в hook_schema.
источник
mymodule_update_7101 () хорош, вместе с этим хуком, если мы добавим hook_install () для выполнения того же самого, в то время как установка модуля вместо определения hook_schema () также работает для меня.
источник
hook_install()
не должен вызывать какие-либо реализации hook_update_N () по простому факту:hook_install()
предназначен для установки модуля в первый раз, что означает отсутствие таблиц для обновления. Кроме того, ваш код не будет работать для обновлений, для запуска которых требуется пакет.