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?
hook_schema
ainda é 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.Respostas:
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, emborauser_schema()
enode_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.
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.
fonte
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.
fonte