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);
}
機能しているようですが、ユーザーが更新を実行して2つ以上のhook_update_N()を実行すると、テーブルを再度変更すると失敗します。結局のところ、最初のhook_update_Nは既に正しいデータベースをインストールしており、2番目のhook_update_M()はすでに最新の列を追加/変更/変更しようとします。
これにどう対処しますか?
したがって、drupal.orgからのコピーペーストのみです。また、スキーマ定義をhook_schemaに追加する必要があります。
/**
* Create new database table {mytable2}.
*/
function mymodule_update_7101() {
$schema['mytable2'] = array(
// table definition array goes here
);
db_create_table('mytable2', $schema['mytable2']);
}