Sollte diese Tabelle beim Erstellen einer neuen Tabelle auch in hook_schema()
einer hinzugefügt werden hook_update_N()
? Oder gibt es einen Trick oder etwas, das ich verpasst habe, damit Datenbank-Updates automatisch Tabellen hinzufügen?
Die Dokumentation von hook_update_N () erklärt nichts über die Einführung neuer Tabellen, während die Dokumentation vonhook_schema()
lautet:
Die von diesem Hook deklarierten Tabellen werden automatisch erstellt, wenn das Modul zum ersten Mal aktiviert wird , und entfernt, wenn das Modul deinstalliert wird.
(Highlight ist meins)
Und wenn ja, wie Sie am besten vermeiden, dass die Schemadefinitionen für die neue Tabelle sowohl in hook_update_N () als auch in hook_schema () dupliziert werden. Beziehen Sie sich einfach wie folgt auf das Schema:
function hook_update_N(&$sandbox) {
$schema = hook_schema();
$name = "foo";
$table = $schema["foo"];
db_create_table($name, $table);
}
Scheint zu funktionieren, aber beim erneuten Ändern der Tabelle schlägt dies fehl, wenn ein Benutzer die Aktualisierungen ausführt und zwei oder mehr hook_update_N () ausführen kann. Immerhin: Der erste hook_update_N installiert dann bereits die richtige Datenbank und der zweite hook_update_M () versucht, bereits aktuelle Spalten hinzuzufügen / zu ändern / zu ändern.
Wie gehst du damit um?
Antworten:
Also nur eine Kopie von drupal.org einfügen. Sie müssen auch die Schemadefinition zu hook_schema hinzufügen.
quelle
mymodule_update_7101 () ist gut, zusammen mit diesem Hook, wenn wir ein hook_install () hinzufügen, um dasselbe auszuführen, während die Modulinstallation anstelle der Definition hook_schema () auch für mich funktioniert.
quelle
hook_install()
sollte keine hook_update_N () -Implementierungen aufrufen, um eine Tatsache zu erhalten:hook_install()
dient zum erstmaligen Installieren eines Moduls, was bedeutet, dass keine Tabellen aktualisiert werden müssen. Außerdem funktioniert Ihr Code nicht für Updates, für deren Ausführung ein Stapel erforderlich ist.