web-dev-qa-db-fra.com

Comment créer une table dans un module personnalisé

Dans Drupal 7, nous utilisions hook_schema() dans le fichier .install pour créer une table. Je pense que, dans Drupal 8, vous pouvez également 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?

13
albertski

hook_schema() est toujours utilisé à partir de Drupal 8 modules 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 implémentent , bien que user_schema() et node_schema() ne définissent pas le schéma pour les entités respectives, qui sont créées 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.

screenshot

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.

10
kiamlaluno

Vous pouvez utiliser l'installation en mode crochet pour créer vos propres tables, si vous le voulez vraiment, bien que Drupal propose de nombreuses autres solutions prêtes à l'emploi. Mais si vous voulez rouler la vôtre , il y a un module d'exemple, appelé dbtng_example, dans le module d'exemples: https://www.drupal.org/project/examples , complet avec 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 existe 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 (au 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.

9
oknate