web-dev-qa-db-ja.com

カスタムモジュールでテーブルを作成する方法

Drupal 7では、.installファイルでhook_schema()を使用してテーブルを作成していました。Drupal 8、あなたもそれを行うことができますが、私はあなたのスキーマで.ymlファイルを作成するべきだという印象を受けました。

Drupal 8)でテーブルを作成する方法は何ですか?

13
albertski

hook_schema()は、Drupal 8モジュールから引き続き使用され、モジュールから使用されるカスタムデータベーステーブルを作成します。ユーザーとNodeモジュールは、 user_schema() および node_schema() は、異なる方法で作成されたそれぞれのエンティティのスキーマを定義していませんが、 。

構成スキーマ は、モジュールが使用するカスタムデータベーステーブルの作成には使用されませんが、構成ファイルの構造を説明します。リンクしたドキュメントにあるPDFファイルは、構成ファイルとそのスキーマの関係を明らかにしています。

screenshot

コンテンツエンティティはhook_schema()を使用しません。 Drupalは、コンテンツエンティティクラスが定義する基本フィールドに基づいて、それらのデータベーステーブルを作成します。

使用する方法は、モジュールの定義によって異なります。コンテンツエンティティ、構成エンティティを定義するか、カスタムテーブルを使用するかは、モジュール次第です。モジュールはそれらすべてを使用することもできます。

10
kiamlaluno

本当に必要な場合は、フックインストールを使用して独自のテーブルを作成できますが、Drupalには他にも多くの独創的なソリューションがあります。ただし、独自のロールを実行する場合は、サンプルモジュールにdbtng_exampleという名前のサンプルモジュールがあります。 https://www.drupal.org/project/examples で、カスタムデータベースエントリを追加および削除するためのルーティングが完了しています。

Drupal 8.で独自のデータベーステーブルを作成するための基礎として使用できます。

考慮すべきもう1つのアプローチは、構成エンティティまたはコンテンツエンティティを作成することです。

drupalコマンドラインツールを使用する場合、これらの「drupal generate:entity:config」および「drupal generate:entity:content」を生成するためのコマンドもあります。

また、examplesモジュールには、config_entity_exampleとcontent_entity_exampleがあります。

https://www.previousnext.com.au/blog/understanding-drupal-8s-config-entities から:コンテンツと構成エンティティの主な違いは、それらがどのように保存されているか、および(モーメント)構成エンティティはフィールド化できません。」.

他にも、すぐに使えるソリューションがいくつかあります。たとえば、config_pagesモジュールを使用して、サイトにデータを保存する場所を簡単に起動できます。 https://www.drupal.org/project/config_pages =

最近、コントローラーとルートを作成することにより、これらを1つのオフランディングページに使用しました。新しいフィールドを簡単に追加でき、画像やエンティティ参照などのデータ型を簡単に使用でき、フィールドフォーマッターを設定して、config_pagesエンティティビュービルダーを使用してフォーマットされたデータを読み込むことができるため、これはカスタムテーブルに比べて大きな利点があります。

9
oknate