Como faço para criar tabela no módulo personalizado

12

No Drupal 7, costumávamos usar hook_schema()o arquivo .install para criar uma tabela. Acredito que, no Drupal 8, você também pode fazer isso, mas fiquei com a impressão de que você deveria criar arquivos .yml com seu esquema.

Qual é o método para criar tabelas no Drupal 8?

Albertski
fonte
3
Não, você está correto. hook_schemaainda é o caminho para criar tabelas personalizadas no Drupal 8 que não são descritas por entidades ou campos de conteúdo . Se sua tabela personalizada é algo que você consideraria "conteúdo", eu usaria entidades, mas se precisar ser mais rápido e tiver uma quantidade limitada de linhas e você não estiver fazendo nenhum cache no front-end, uma tabela personalizada está bem. Você também deve considerar se esta tabela é "configuração"; nesse caso, uma entidade ou um objeto de configuração é o caminho a seguir.
Mestrcliffe #

Respostas:

9

hook_schema()ainda é usado nos módulos Drupal 8 para criar tabelas de banco de dados personalizadas usadas a partir do módulo. Mesmo o usuário e os módulos Node implementá-lo, embora user_schema()e node_schema()não definir o esquema para as respectivas entidades, que são criados de uma maneira diferente.

O esquema de configuração não é usado para criar tabelas de banco de dados personalizadas que um módulo usa, mas descreve a estrutura dos arquivos de configuração. O arquivo PDF encontrado na documentação que vinculei deixa clara a relação entre um arquivo de configuração e seu esquema.

captura de tela

As entidades de conteúdo não usam hook_schema(); Drupal cria a tabela de banco de dados para eles com base nos campos básicos que a classe da entidade de conteúdo define.

Qual método usar depende do que o módulo define. Cabe ao módulo definir uma entidade de conteúdo, uma entidade de configuração ou apenas usar uma tabela personalizada. Um módulo pode até usar todos eles.

kiamlaluno
fonte
8

Você pode usar a instalação por gancho para criar suas próprias tabelas, se você realmente quiser, embora o Drupal tenha muitas outras soluções prontas para uso. Mas se você quiser criar o seu próprio, existe um módulo de exemplo, chamado dbtng_example, no módulo de exemplos: https://www.drupal.org/project/examples , completo com o roteamento para adicionar e remover as entradas personalizadas do banco de dados.

Eu recomendo instalá-lo e testá-lo, para que você possa usá-lo como base para criar sua própria tabela de banco de dados no Drupal 8.

Outra abordagem a considerar é criar uma entidade de configuração ou uma entidade de conteúdo.

Se você usar a ferramenta de linha de comando drupal, existe até um comando para gerar esses "drupal generate: entity: config" e "drupal generate: entity: content".

Também no módulo de exemplos, há config_entity_example e content_entity_example.

Em https://www.previousnext.com.au/blog/understanding-drupal-8s-config-entities : "A principal diferença entre o conteúdo e as entidades de configuração é como elas são armazenadas e (no momento) as entidades de configuração não podem ser colocadas em campo "

Existem outras soluções prontas para uso, como o módulo config_pages, que permite que você facilmente localize locais para armazenar dados em seu site: https://www.drupal.org/project/config_pages

Recentemente, os usamos para páginas de destino únicas, criando um controlador e uma rota. Isso tem uma enorme vantagem sobre uma tabela personalizada, pois você pode adicionar novos campos facilmente e usar tipos de dados como imagens e referências de entidades com facilidade, também pode definir formatadores de campos e carregar os dados formatados usando o construtor de exibição de entidade config_pages.

oknate
fonte