web-dev-qa-db-fra.com

Façon appropriée de créer des tableaux personnalisés

J'ai essayé de créer des tables personnalisées pour un module dans Drupal via hook_install() et hook_schema() dans module.install, et cela fonctionne bien après avoir désactivé et activé module utilisant drush dre module_name. Est-ce la bonne façon de créer des tables dans un module personnalisé?

Puis-je utiliser config/schema/module_name.schema.yml pour créer des tables? Sinon, à quoi servent les fichiers de schéma dans Drupal 8?

7
Crazyrubixfan

hook_schema() n'est pas utilisé différemment de la façon dont il était utilisé sur Drupal 7, la seule différence est qu'il n'est pas utilisé pour créer des tables de base de données pour (Voir, par exemple, node_schema() .) En particulier, vous n'avez pas besoin d'appeler drupal_install_schema() ) dans hook_install() pour créer des tables de base de données personnalisées, ce qui était plutôt nécessaire dans Drupal 6.

Les fichiers .schema.yml (par exemple, ser.schema.yml ) sont utilisés pour définir le schéma de la configuration utilisée dans les fichiers de configuration du module. Son objectif est différent de la définition d'un schéma de table de base de données et ils ne peuvent pas être utilisés pour définir des tables personnalisées utilisées à partir de modules tiers.

9
kiamlaluno

Pour une table de base de données, vous utilisez hook_schema pour le définir et si le module existe déjà, vous pouvez utiliser hook_update pour créer la table manuellement car le hook_schema n'est déclenché que lors de l'installation.

Tout cela est comme vous le décrivez.

La configuration du schéma n'est pas utilisée pour créer des tables de base de données, mais plutôt pour définir le schéma des configurations. Fondamentalement, vous l'utilisez pour expliquer la structure des configurations que votre module enregistrera, les types de données, etc. Je ne sais pas ce qui l'utilise réellement car la plupart des choses fonctionneront sans lui.

3
googletorp

Les deux "schémas" ont des contextes différents.

Votre affirmation de créer des tables de base de données est correcte.

les fichiers schema.yml ont un autre objectif. De la documentation:

En utilisant les connaissances intégrées dans les schémas de configuration sur ce qui est stocké d'une entité de configuration, l'implémentation de persistance par défaut pour les entités de configuration nécessite un schéma de configuration pour l'entité de configuration, de sorte que les bonnes propriétés sont exportées avec les types définis. Bien qu'il soit préférable de fournir des schémas de configuration, si vous ne le souhaitez vraiment pas, implémentez la méthode toArray () dans votre implémentation d'entité de configuration pour ne pas nécessiter de schéma pour enregistrer les entités de configuration de votre type.

Et ce n'est qu'une raison. Voir: https://www.drupal.org/docs/8/api/configuration-api/configuration-schemametadata#use

2
Kevin