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


12

Drupal 7 hook_schema()では、.installファイルでテーブルを作成するために使用していました。Drupal 8ではそれもできると思いますが、スキーマを使用して.ymlファイルを作成する必要があるという印象を受けました。

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


3
いいえ、あなたは正しいです。hook_schemaDrupal 8でも、コンテンツエンティティやフィールドで記述されいないカスタムテーブルを作成する方法がまだあります。カスタムテーブルが「コンテンツ」と見なすものである場合は、エンティティを使用しますが、より高速である必要があり、行数が制限され、フロントエンドでキャッシュを実行しない場合は、カスタムテーブル結構です。また、このテーブルが「構成」であるかどうかを検討する必要があります。この場合、構成エンティティまたは構成オブジェクトが適切です。
mradcliffe 2016年

回答:


9

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

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

スクリーンショット

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

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


8

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

インストールして試してみることをお勧めします。それを基にして、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エンティティビュービルダーを使用してフォーマットされたデータを読み込むことができるため、これはカスタムテーブルに比べて大きな利点があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.