web-dev-qa-db-ja.com

カスタムテーブルを作成する適切な方法

モジュールのカスタムテーブルをDrupal via hook_install()hook_schema() via module.installで作成しようとしましたが、無効にしてから有効にするとうまくいきますdrush dre module_nameを使用したモジュールこれは、カスタムモジュールでテーブルを作成する適切な方法ですか?

テーブルの作成にconfig/schema/module_name.schema.ymlを使用できますか?そうでない場合、Drupal 8でのスキーマファイルの使用は何ですか?

7
Crazyrubixfan

hook_schema() は、Drupal 7での使用方法とは異なり、使用されません。唯一の違いは、データベーステーブルの作成に使用されないことです。エンティティ(たとえば、 node_schema() を参照してください。)特に、 drupal_install_schema() )を呼び出す必要はありません。 hook_install() = Drupal 6。

.schema.ymlファイル(例 ser.schema.yml )は、モジュールの構成ファイルで使用される構成のスキーマを定義するために使用されます。その目的はデータベーステーブルスキーマの定義とは異なり、サードパーティのモジュールから使用されるカスタムテーブルの定義には使用できません。

9
kiamlaluno

データベーステーブルの場合、hook_schemaを使用して定義します。モジュールがすでに存在する場合は、hook_updateを使用して手動でテーブルを作成できます。これは、フック_スキーマがインストール時にのみトリガーされるためです。

これはあなたが説明するようなものです。

スキーマ構成は、データベーステーブルの作成には使用されません。代わりに、構成のスキーマを定義するために使用されます。基本的には、モジュールが保存する設定の構造、データ型などを説明するために使用します。ほとんどのものがそれなしで機能するため、実際にこれを使用するものはわかりません。

3
googletorp

2つの「スキーマ」には異なるコンテキストがあります。

データベーステーブルを作成するというあなたの主張は正しいです。

schema.ymlファイルは別の目的を果たします。ドキュメントから:

構成エンティティーの保管内容に関する構成スキーマに埋め込まれた知識を使用して、構成エンティティーのデフォルトの永続性実装には構成エンティティーの構成スキーマが必要であるため、定義されたタイプで正しいプロパティーがエクスポートされます。構成スキーマを提供することをお勧めしますが、本当に必要ない場合は、タイプの構成エンティティを保存するためのスキーマを必要としないように、構成エンティティ実装にtoArray()メソッドを実装してください。

それが理由の1つにすぎません。参照: https://www.drupal.org/docs/8/api/configuration-api/configuration-schemametadata#use

2
Kevin