Lorsque vous créez une nouvelle table dans hook_schema()
, cette table doit-elle également être ajoutée dans un hook_update_N()
? Ou y a-t-il une astuce, ou quelque chose que j'ai raté, pour que les mises à jour de données ajoutent automatiquement des tables?
La documentation de hook_update_N () n'explique rien sur l'introduction de nouvelles tables, alors que la documentation dehook_schema()
dit:
Les tables déclarées par ce hook seront automatiquement créées lors de la première activation du module et supprimées lors de la désinstallation du module.
(Le surlignage est à moi)
Et si c'est le cas, comment éviter au mieux de dupliquer les définitions de schéma pour la nouvelle table dans hook_update_N () et hook_schema (). Se référant simplement au schéma comme suit:
function hook_update_N(&$sandbox) {
$schema = hook_schema();
$name = "foo";
$table = $schema["foo"];
db_create_table($name, $table);
}
Semble fonctionner, mais en modifiant à nouveau la table, échouera si un utilisateur exécute les mises à jour et parvient à exécuter deux ou plusieurs hook_update_N () s. Après tout: le premier hook_update_N installera alors déjà la bonne base de données et le second hook_update_M () essaiera d'ajouter / modifier / modifier des colonnes qui étaient déjà à jour.
Comment gérez-vous cela?
Réponses:
Donc, juste un copier-coller de drupal.org. Vous devez également ajouter la définition de schéma à hook_schema.
la source
mymodule_update_7101 () est bon, avec ce crochet si nous ajoutons un hook_install () pour exécuter la même chose tandis que l'installation du module au lieu de la définition de hook_schema () fonctionne aussi pour moi.
la source
hook_install()
ne devrait appeler aucune implémentation hook_update_N (), pour un simple fait:hook_install()
est pour installer un module pour la première fois, ce qui signifie qu'il n'y a pas de tables à mettre à jour. En outre, votre code ne fonctionnerait pas pour les mises à jour nécessitant un lot pour s'exécuter.