¿Cómo creo una tabla en un módulo personalizado?


12

En Drupal 7 solíamos usar hook_schema()en el archivo .install para crear una tabla. Creo que, en Drupal 8, también puede hacerlo, pero tenía la impresión de que debería crear archivos .yml con su esquema.

¿Cuál es el método para crear tablas en Drupal 8?


3
No, tienes razón. hook_schemasigue siendo la forma de crear tablas personalizadas en Drupal 8 que no están descritas por entidades o campos de contenido . Si su tabla personalizada es algo que consideraría "contenido", entonces usaría entidades, pero si necesita ser más rápido y tendrá una cantidad limitada de filas y no está haciendo ningún almacenamiento en caché en el front-end, entonces una tabla personalizada está bien. También debe considerar si esta tabla es "configuración", en cuyo caso una entidad u objeto de configuración es el camino a seguir.
mradcliffe el

Respuestas:


9

hook_schema()todavía se usa desde los módulos de Drupal 8 para crear tablas de bases de datos personalizadas usadas desde el módulo. Incluso el los módulos de nodo de usuario y ponerlo en práctica, aunque user_schema()y node_schema()no definen el esquema de las respectivas entidades, que son creados de una manera diferente.

El esquema de configuración no se utiliza para crear tablas de bases de datos personalizadas que utiliza un módulo, sino que describe la estructura de los archivos de configuración. El archivo PDF que se encuentra en la documentación que vinculé aclara la relación entre un archivo de configuración y su esquema.

captura de pantalla

Las entidades de contenido no usan hook_schema(); Drupal crea la tabla de base de datos para ellos basándose en los campos base que define la clase de entidad de contenido.

El método a utilizar depende de lo que defina el módulo. Depende del módulo definir una entidad de contenido, una entidad de configuración, o simplemente usar una tabla personalizada. Un módulo podría incluso usarlos todos.


8

Puede usar la instalación en gancho para crear sus propias tablas, si realmente lo desea, aunque Drupal tiene muchas otras soluciones más listas para usar. Pero si desea rodar el suyo, hay un módulo de ejemplo, llamado dbtng_example, en el módulo de ejemplos: https://www.drupal.org/project/examples , completo con enrutamiento para agregar y eliminar sus entradas de base de datos personalizadas.

Recomiendo instalarlo y probarlo, luego puede usarlo como base para crear su propia tabla de base de datos en Drupal 8.

Otro enfoque a considerar es crear una entidad de configuración o una entidad de contenido.

Si usa la herramienta de línea de comandos drupal, incluso hay un comando para generar estos "drupal generate: entity: config" y "drupal generate: entity: content".

También en el módulo de ejemplos, hay config_entity_example y content_entity_example.

De https://www.previousnext.com.au/blog/understanding-drupal-8s-config-entities : "La principal diferencia entre el contenido y las entidades de configuración es cómo se almacenan y (en este momento) las entidades de configuración no son confiables ".

Hay algunas otras soluciones listas para usar, como el módulo config_pages que le permite girar fácilmente lugares para almacenar datos en su sitio: https://www.drupal.org/project/config_pages

Recientemente los usamos para páginas de aterrizaje únicas, creando un controlador y una ruta. Esto tiene una gran ventaja sobre una tabla personalizada, ya que puede agregar fácilmente nuevos campos y puede usar tipos de datos como imágenes y referencias de entidades fácilmente, también puede establecer formateadores de campo y cargar los datos formateados usando el generador de vistas de entidad config_pages.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.