Comment créer une table dans un module personnalisé


12

Dans Drupal 7, nous hook_schema()utilisions dans le fichier .install pour créer une table. Je crois que, dans Drupal 8, vous pouvez aussi le faire, mais j'avais l'impression que vous devriez créer des fichiers .yml avec votre schéma.

Quelle est la méthode pour créer des tables dans Drupal 8?


3
Non, tu as raison. hook_schemaest toujours le moyen de créer des tableaux personnalisés dans Drupal 8 qui ne sont pas décrits par des entités de contenu ou des champs . Si votre table personnalisée est quelque chose que vous considéreriez comme du «contenu», j'utiliserais des entités, mais si elle doit être plus rapide et avoir un nombre limité de lignes et que vous ne faites pas de mise en cache sur le frontal, alors une table personnalisée c'est bien. Vous devez également déterminer si cette table est une "configuration", auquel cas une entité ou un objet de configuration est la solution.
mradcliffe

Réponses:


9

hook_schema()est toujours utilisé à partir des modules Drupal 8 pour créer des tables de base de données personnalisées utilisées à partir du module. Même l'utilisateur et les modules Node mettre en œuvre, bien user_schema()et node_schema()ne définissent pas le schéma pour les entités respectives, qui sont créés d'une manière différente.

Le schéma de configuration n'est pas utilisé pour créer des tables de base de données personnalisées qu'un module utilise, mais décrit la structure des fichiers de configuration. Le fichier PDF trouvé dans la documentation que j'ai liée montre clairement la relation entre un fichier de configuration et son schéma.

capture d'écran

Les entités de contenu n'utilisent pas hook_schema(); Drupal crée la table de base de données pour eux en se basant sur les champs de base définis par la classe d'entités de contenu.

La méthode à utiliser dépend de ce que le module définit. Il appartient au module de définir une entité de contenu, une entité de configuration, ou simplement d'utiliser une table personnalisée. Un module pourrait même tous les utiliser.


8

Vous pouvez utiliser l'installation par crochet pour créer vos propres tables, si vous le souhaitez vraiment, bien que Drupal propose de nombreuses autres solutions prêtes à l'emploi. Mais si vous voulez rouler le vôtre, il y a un module d'exemple, appelé dbtng_example, dans le module d'exemples: https://www.drupal.org/project/examples , avec un routage pour ajouter et supprimer vos entrées de base de données personnalisées.

Je vous recommande de l'installer et de l'essayer, vous pouvez ensuite l'utiliser comme base pour créer votre propre table de base de données dans Drupal 8.

Une autre approche à considérer consiste à créer une entité de configuration ou une entité de contenu.

Si vous utilisez l'outil de ligne de commande drupal, il y a même une commande pour générer ces "drupal generate: entity: config" et "drupal generate: entity: content".

Toujours dans le module d'exemples, il y a config_entity_example et content_entity_example.

De https://www.previousnext.com.au/blog/understanding-drupal-8s-config-entities : "La principale différence entre le contenu et les entités de configuration est la façon dont elles sont stockées et (pour le moment) les entités de configuration ne sont pas modifiables ".

Il existe d'autres solutions plus prêtes à l'emploi, telles que le module config_pages qui vous permettent de créer facilement des emplacements pour stocker des données sur votre site: https://www.drupal.org/project/config_pages

Nous les avons récemment utilisés pour des pages de destination uniques, en créant un contrôleur et un itinéraire. Cela a un énorme avantage sur une table personnalisée car vous pouvez facilement ajouter de nouveaux champs et vous pouvez facilement utiliser des types de données tels que des images et des références d'entité, vous pouvez également définir des formateurs de champ et charger les données formatées à l'aide du générateur de vue d'entité config_pages.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.