Wie kann ich bei Verwendung mehrerer Datenbanken in Drupal 7 festlegen, dass eine Tabelle in einer anderen Datenbank auf einem anderen Server erstellt werden soll?
Wenn Sie ein Modul installieren, geht Drupal standardmäßig davon aus, dass alles hook_schema()
in der Standarddatenbank installiert sein soll. Gibt es eine Möglichkeit, anzugeben, dass eine Tabelle in einer anderen Datenbank erstellt werden soll, oder gibt es eine manuelle Problemumgehung, die ich verwenden kann?
Antworten:
Ich glaube nicht, dass es eine offizielle API gibt. Es macht nicht viel Sinn, dies im Allgemeinen zu tun.
Abgesehen davon müssen Sie Ihrem
hook_schema
Namen nur einen anderen Namen geben alsyourmodule_schema
(im Grunde das, was Sie wollenyourmodule_schema_otherdb
) und dann in hook_install () zuerst Ihre Datenbank wechseln und dann replizieren, was drupal_install_schema () tut, außer dass Sie Ihre benutzerdefinierte Schemadefinition aufrufen Funktion und schalten Sie die Datenbank wieder auf den Standard.Denken Sie auch daran, umzusetzen
hook_uninstall()
.Keine Ahnung, warum du das machen willst. :)
quelle
CREATE TABLE
Erklärungen dazu schreiben .Ich habe dies mit den Informationen von Berdir erreicht . Mein Code sieht so aus:
quelle
Eine Drupal 8 Version des * .install Datei Code zur Verfügung gestellt von @ Елин Й .:
Hinweis: Die Datenbank muss vorhanden und in settings.php angegeben sein.
Hier ist ein Gist .
quelle
In Settings.php
$db_url=array('default'=>$db_url, 'sec_db'=>$sec_db_url);
In
hook_schema
db_set_active('sec_db')
wird nun eine Verbindung zu Ihrer anderen DB hergestellt, nicht sicher, ob dies empfohlen wird oder nicht auf eigenes Risiko. Und Sie können db_prefix verwenden, um eine Abfrage von dieser sekundären Datenbank durchzuführen. Sie können das db-Präfix in settings.php verwendenquelle
$db_url
,$db_prefix
als globale Einstellung für Drupal 6. Und der Punkt-Notation funktioniert nur , wenn eine andere Datenbank auf demselben MySQL - Server verwenden, nicht , wenn (wie in meinem Fall) Sie Zugriff auf verschiedene Server.$db_url
oder eine globale$db_prefix
Variable, und selbst wenn dies der Fall wäre, würde dies das Problem nicht lösen.