Wie erstelle ich eine Tabelle im benutzerdefinierten Modul?

12

In Drupal 7 haben wir hook_schema()in der Installationsdatei eine Tabelle erstellt. Ich glaube, dass Sie dies in Drupal 8 auch tun können, aber ich hatte den Eindruck, dass Sie .yml-Dateien mit Ihrem Schema erstellen sollten.

Wie werden Tabellen in Drupal 8 erstellt?

albertski
quelle
3
Nein, du hast recht. hook_schemaAuf diese Weise können in Drupal 8 benutzerdefinierte Tabellen erstellt werden, die nicht durch Inhaltsentitäten oder Felder beschrieben werden . Wenn Ihre benutzerdefinierte Tabelle etwas ist, das Sie als "Inhalt" betrachten würden, würde ich Entitäten verwenden, aber wenn es schneller sein muss und eine begrenzte Anzahl von Zeilen hat und Sie kein Caching am Frontend durchführen, dann eine benutzerdefinierte Tabelle ist gut. Sie sollten auch überlegen, ob es sich bei dieser Tabelle um "Konfiguration" handelt. In diesem Fall ist eine Konfigurationsentität oder ein Konfigurationsobjekt der richtige Weg.
mradcliffe

Antworten:

9

hook_schema()wird weiterhin von Drupal 8-Modulen verwendet, um benutzerdefinierte Datenbanktabellen zu erstellen, die vom Modul verwendet werden. Auch die Benutzer und die Node - Module implementieren es, obwohl user_schema()und node_schema()nicht das Schema für die jeweiligen Einheiten definieren, die in einer anderen Art und Weise erstellt werden.

Das Konfigurationsschema wird nicht zum Erstellen benutzerdefinierter Datenbanktabellen verwendet, die von einem Modul verwendet werden, sondern beschreibt die Struktur von Konfigurationsdateien. Die PDF-Datei in der von mir verlinkten Dokumentation verdeutlicht die Beziehung zwischen einer Konfigurationsdatei und ihrem Schema.

Bildschirmfoto

Inhaltsentitäten werden nicht verwendet hook_schema(). Drupal erstellt die Datenbanktabelle für sie basierend auf den Basisfeldern, die die Inhaltsentitätsklasse definiert.

Welche Methode verwendet werden soll, hängt davon ab, was das Modul definiert. Es liegt an dem Modul, eine Inhaltsentität oder eine Konfigurationsentität zu definieren oder einfach eine benutzerdefinierte Tabelle zu verwenden. Ein Modul könnte sogar alle verwenden.

kiamlaluno
quelle
8

Sie können die Hook-Installation verwenden, um Ihre eigenen Tabellen zu erstellen, wenn Sie dies wirklich möchten, obwohl Drupal viele andere sofort einsatzbereite Lösungen bietet. Wenn Sie jedoch Ihre eigenen rollen möchten, finden Sie im Beispielmodul ein Beispielmodul mit dem Namen dbtng_example: https://www.drupal.org/project/examples , das das Routing zum Hinzufügen und Entfernen Ihrer benutzerdefinierten Datenbankeinträge enthält.

Ich würde empfehlen, es zu installieren und auszuprobieren. Dann können Sie es als Grundlage für die Erstellung Ihrer eigenen Datenbanktabelle in Drupal 8 verwenden.

Ein weiterer zu berücksichtigender Ansatz besteht darin, eine Konfigurationsentität oder eine Inhaltsentität zu erstellen.

Wenn Sie das Befehlszeilentool drupal verwenden, gibt es sogar einen Befehl zum Generieren dieser "drupal generate: entity: config" und "drupal generate: entity: content".

Ebenfalls im Beispielmodul gibt es config_entity_example und content_entity_example.

Von https://www.previousnext.com.au/blog/understanding-drupal-8s-config-entities : "Der Hauptunterschied zwischen Inhalts- und Konfigurationsentitäten besteht darin, wie sie gespeichert werden und (derzeit) Konfigurationsentitäten nicht feldfähig sind ".

Es gibt einige weitere Standardlösungen, z. B. das Modul config_pages, mit dem Sie problemlos Orte zum Speichern von Daten auf Ihrer Site hochfahren können: https://www.drupal.org/project/config_pages

Wir haben diese kürzlich für einmalige Zielseiten verwendet, indem wir einen Controller und eine Route erstellt haben. Dies hat einen großen Vorteil gegenüber einer benutzerdefinierten Tabelle, da Sie problemlos neue Felder hinzufügen und Datentypen wie Bilder und Entitätsreferenzen einfach verwenden können. Sie können auch Feldformatierer festlegen und die mit dem Entity View Builder config_pages formatierten Daten laden.

oknate
quelle