Mysqlで2つのデータテーブルを定義するmy_module.installファイルを持つカスタムモジュールがあります。モジュールはすでにインストールされており、フォームからそれらにデータを保存できます。これで要件が変更され、同じモジュール内に3番目のテーブルを作成する必要があります。モジュールの再インストールにはどうすればよいですか。
1)MYSQlスクリプトを準備して既存のデータを一時テーブルにバックアップし、モジュールをアンインストールして再インストールした後、データを一時テーブルからテーブルにコピーします。
2)を調べた https://www.drupal.org/project/backup_migrate 互換性がないdrupalコアバージョン8.6.0を使用している
3)他のモジュールやアイデアはありますか?
提案後に編集:mymodule.installファイルに以下の関数を作成し、mymodule_schema()メソッドを編集して、drush updatedbを実行しました。それでも、予期したテーブルが作成されないため、dbは変更されません。現在のローカルDBではテーブルが使用できないため、他の場所で言及されているように、システムテーブルを調べて最新バージョン番号を取得できません。
function mymodule_update_8601(){
$spec = array(
'fields' => array(
'application_setup_id' => array(
'type' => 'serial',
'not null' => TRUE,
'description' => 'Primary Key: ID',
),
),
);
$schema = Database::getConnection()->schema();
$schema->createTable('application_setup', $spec);
}
データベーススキーマの変更を適用する場合は、モジュールを再インストールしないでください。 _MYMODULE.install
_ファイルから hook_update_N()
を介してこれらの変更を適用します。
drupal.orgのDrupal 8 のデータベーススキーマやデータの更新を参照)。
モジュールが
hook_schema()
で定義するデータベーススキーマに関連するデータモデルを変更している場合は、データモデルを適切に更新する必要があります。 2つのステップは次のとおりです。
- データベーステーブルとフィールド定義が変更された場合に新しいデータモデルを反映するように、
hook_schema()
コードを更新します。これにより、変更を加えた後にモジュールをインストールする人が正しいデータベーステーブルを確実にインストールできます。詳細については、スキーマAPIのドキュメントを参照してください。hook_update_N()
関数を記述します。これにより、変更を加える前にすでにモジュールをインストールしていたモジュールの既存ユーザーのデータベースが更新され、ユーザーは引き続き機能できるようになります。これについては以下で説明します。
hook_update_N()
から新しいテーブルを追加する方法のサンプルもあります。
_$spec = [ 'description' => 'My description', 'fields' => [ 'myfield1' => [ 'description' => 'Myfield1 description.', 'type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => '', ], 'myfield2' => [ 'description' => 'Myfield2 description', 'type' => 'text', 'not null' => TRUE, ], ], 'primary key' => ['myfield1'], ]; $schema = Database::getConnection()->schema(); $schema->createTable('mytable2', $spec);
_