モジュールのカスタムテーブルをDrupal via hook_install()
とhook_schema()
via module.installで作成しようとしましたが、無効にしてから有効にするとうまくいきますdrush dre module_name
を使用したモジュールこれは、カスタムモジュールでテーブルを作成する適切な方法ですか?
テーブルの作成にconfig/schema/module_name.schema.ymlを使用できますか?そうでない場合、Drupal 8でのスキーマファイルの使用は何ですか?
hook_schema()
は、Drupal 7での使用方法とは異なり、使用されません。唯一の違いは、データベーステーブルの作成に使用されないことです。エンティティ(たとえば、 node_schema()
を参照してください。)特に、 drupal_install_schema()
)を呼び出す必要はありません。 hook_install()
= Drupal 6。
.schema.ymlファイル(例 ser.schema.yml )は、モジュールの構成ファイルで使用される構成のスキーマを定義するために使用されます。その目的はデータベーステーブルスキーマの定義とは異なり、サードパーティのモジュールから使用されるカスタムテーブルの定義には使用できません。
データベーステーブルの場合、hook_schema
を使用して定義します。モジュールがすでに存在する場合は、hook_update
を使用して手動でテーブルを作成できます。これは、フック_スキーマがインストール時にのみトリガーされるためです。
これはあなたが説明するようなものです。
スキーマ構成は、データベーステーブルの作成には使用されません。代わりに、構成のスキーマを定義するために使用されます。基本的には、モジュールが保存する設定の構造、データ型などを説明するために使用します。ほとんどのものがそれなしで機能するため、実際にこれを使用するものはわかりません。
2つの「スキーマ」には異なるコンテキストがあります。
データベーステーブルを作成するというあなたの主張は正しいです。
schema.ymlファイルは別の目的を果たします。ドキュメントから:
構成エンティティーの保管内容に関する構成スキーマに埋め込まれた知識を使用して、構成エンティティーのデフォルトの永続性実装には構成エンティティーの構成スキーマが必要であるため、定義されたタイプで正しいプロパティーがエクスポートされます。構成スキーマを提供することをお勧めしますが、本当に必要ない場合は、タイプの構成エンティティを保存するためのスキーマを必要としないように、構成エンティティ実装にtoArray()メソッドを実装してください。
それが理由の1つにすぎません。参照: https://www.drupal.org/docs/8/api/configuration-api/configuration-schemametadata#use