drupal8

Actualizar la base de datos de acuerdo a la definición de un Tipo de Entidad

Actualización 12 de Septiembre 2020

Desde la versión Drupal 8.7 lo que se menciona en este artículo ha cambiado. Lo cuál está oficialmente informado en la descripción de este enlace.

Actualmente se requiere de un módulo adicional a drush, llamado Devel Entity Updates, luego de instalarlo podrás actualizar la base de datos de las entidades haciendo uso del comando:

drush entup

O su equivalente

drush entity-updates

La versión drush updatedb --entity-updates ya no está soportada.

De la misma forma, la ejecución de código PHP con devel ha sido quitada, para poder ejecutar código PHP a través de la interfaz de drupal es necesario usar el módulo Devel PHP. Este módulo habilita la ruta devel/php donde podrás usar tu código, sin embargo el código recomendado más abajo en este artículo está como deprecated y ya fue quitado en la versión 9 de Drupal.

Fin actualización 12 de Septiembre 2020

 

Para crear Tipos de Entidad de contenido (Content Entity Type) en Drupal 8, se hace uso de clases con anotaciones y métodos especiales para definir ciertas características; por ejemplo los campos del tipo de entidad. Cuando se instala el módulo, este Tipo de Entidad se agrega y en la base de datos se agregan las tablas con la estructura necesaria para almacenar la información de la entidad, incluyendo los campos del tipo de entidad.

 

Que sucedería si luego de realizar un cambio en esta definición, por ejemplo al agregar un campo adicional, deseamos que este cambio de código se vea reflejado en la base de datos. Esto no ocurrirá automáticamente. Tampoco el borrado de caché ayuda en este caso.

 

Probablemente una de las soluciones que se te han ocurrido es la de desinstalar y volver a instalar el módulo. Esto funciona, con un costo asociado: el tiempo que demora todo este proceso. Además, se pierden los datos que ya se han agregado.

 

Hay una alternativa, ejecutar el siguiente código.

 

\Drupal::entityTypeManager()->clearCachedDefinitions(); \Drupal::service('entity.definition_update_manager')->applyUpdates();

 

Podrías realizarlo por ejemplo usando el módulo devel y en la página para ejecutar código, copiar, pegar y ejecutar el mismo.

Ejecución de código PHP usando Devel

 

Con drush, tienes un equivalente con el siguiente comando:

 

drush updatedb --entity-updates

 

Gracias a este pequeño truco podrás crear y modificar tus tipos de entidad con más facilidad.

Me pareció interesante el artículo

Deseo más información

O también puedes comunicarte con nosotros.

por whatsapp por whatsapp

Añadir nuevo comentario

Me gustaría más información sobre:

CAPTCHA