¿Cómo vuelvo a ejecutar las actualizaciones (cambiar la versión del esquema del módulo)?

22

Estoy trabajando en un módulo y cambié un par de tipos de campo en el esquema. No hice una copia de seguridad antes de probarla y estropeé la base de datos (es solo un sitio de desarrollo). De todos modos, reinstalé todo, y la versión del esquema está configurada con la de la actualización más alta. Sin embargo, en realidad necesito ejecutar la actualización; una vista que no instalaría si tuviera el esquema actualizado en el código del módulo, así que pensé que sería una buena forma de probar esa actualización.

¿Cómo restablezco la versión de esquema de mi módulo a una versión en particular? En Drupal 7, hubiera hecho esto:

drush sqlq "UPDATE system SET schema_version=8102 WHERE name='flllpdf' AND type='module'"

wizonesolutions
fuente

Respuestas:

47

Si bien el acceso al estado funciona directamente, también puede usar la API: drupal_set_installed_schema_version () . Que en realidad existe sin cambios al menos desde 4.7, como se ve en la página de documentación vinculada. Probablemente una de las pocas funciones API que existió durante tanto tiempo;)

Para configurarlo desde drush:

drush ev "drupal_set_installed_schema_version('fillpdf', 8012)"

Nota: en Drupal 7 necesita agregar más include 'includes/install.inc';.

Berdir
fuente
55
También es bueno si simplemente necesita verificar rápidamente: drush ev "echo drupal_get_installed_schema_version ('MODULE')"; api.drupal.org/api/drupal/core%21includes%21schema.inc/function/…
ben.hamelin
o drush pm-info modulename
Beanluc
10

Drupal 8 ahora usa el keyvalueservicio para almacenar información sobre la versión del esquema. Esta es la misma API que utiliza la API de estado .

La información del valor se serializa cuando se almacena en la base de datos, por lo que el uso de una consulta SQL directa es subóptimo. En su lugar, use drush php-eval(o un script que inicie Drupal, si no tiene Drush) para ejecutar lo siguiente:

<?php
  \Drupal::keyValue('system.schema')->set('fillpdf', (int) 8102);
?>

Cambie fillpdfy 8102a su nombre de módulo y la versión de esquema deseada, respectivamente.

La forma Drush de este comando es:

drush ev "\Drupal::keyValue('system.schema')->set('fillpdf', (int) 8102)";

wizonesolutions
fuente
0

Para CONFIGURAR y OBTENER actualizaciones del módulo a través del código (sin Drush). Debajo está el código

GET  = drupal_get_installed_schema_version('moduleName');

SET = drupal_set_installed_schema_version("moduleName", "8000");
Vernit Gupta
fuente
0

También puede ir a actualizarlo directamente en la base de datos. Si está utilizando algo como Sequel Pro (mac) o cualquier herramienta de interfaz de usuario de la base de datos que Windows / Linux tenga, es realmente fácil. Podría decirse que no es la mejor idea, y no recomendaría hacerlo contra una base de datos de nivel de producción, ¡pero hará el trabajo!

Tabla = valor_clave

colección = system.schema
name = fillpdf (your_module)
valor = actualizar a i: 8102;

ZhuRenTongKu
fuente