Lors de l'utilisation de plusieurs bases de données dans Drupal 7, comment puis-je spécifier qu'une table doit être créée dans une base de données différente sur un serveur différent?
Par défaut, lorsque vous installez un module, Drupal suppose que tout hook_schema()
doit être installé dans la base de données par défaut. Existe-t-il un moyen de spécifier qu'une table doit être créée sur une base de données différente, ou existe-t-il une sorte de solution de contournement manuelle que je peux utiliser?
Réponses:
Je ne pense pas qu'il existe une API officielle; cela n'a pas beaucoup de sens de le faire en général.
Cela dit, tout ce que vous devez faire est de vous donner
hook_schema
un nom différent deyourmodule_schema
(essentiellement ce que vous voulez, commeyourmodule_schema_otherdb
), puis dans hook_install (), changez d' abord votre base de données , puis répliquez ce que drupal_install_schema () fait, sauf que vous appelez votre définition de schéma personnalisé fonction, puis revenir à la base de données par défaut.N'oubliez pas non plus de mettre en œuvre
hook_uninstall()
.Mais je ne sais pas pourquoi vous voudriez faire ça. :)
la source
CREATE TABLE
déclarations à ce sujet.J'y suis parvenu grâce aux informations fournies par Berdir . Mon code ressemble à:
la source
Une version Drupal 8 du code de fichier * .install fourni par @ Елин Й .:
Remarque: la base de données doit exister et être spécifiée dans settings.php.
Voici un résumé .
la source
Dans Settings.php
$db_url=array('default'=>$db_url, 'sec_db'=>$sec_db_url);
In
hook_schema
db_set_active('sec_db')
va maintenant se connecter à votre autre base de données, ne savez pas si cela est recommandé ou ne l'essayez pas à vos risques et périls. Et vous pouvez utiliser db_prefix pour interroger à partir de cette base de données secondaire. Vous pouvez utiliser le préfixe db dans settings.phpla source
$db_url
,$db_prefix
comme un paramètre global sont pour Drupal 6. Et la notation par points ne fonctionne que lorsque vous utilisez une base de données différente sur le même serveur MySQL, pas quand (comme dans mon cas) vous accédez à différents serveurs.$db_url
ou une$db_prefix
variable globale dans Drupal 7, et même s'il y en avait, cela ne résoudrait pas le problème.