Cuando crea una nueva tabla hook_schema()
, ¿debería agregarse esa tabla también en una hook_update_N()
? ¿O hay algún truco, o algo que me perdí, para que las actualizaciones de databae agreguen tablas automáticamente?
La documentación de hook_update_N () no explica nada acerca de la introducción de nuevas tablas, mientras que la documentación dehook_schema()
dice:
Las tablas declaradas por este enlace se crearán automáticamente cuando el módulo se habilite por primera vez y se eliminarán cuando se desinstale el módulo.
(Lo más destacado es mío)
Y si es así, cómo evitar mejor duplicar las definiciones de esquema para la nueva tabla tanto en hook_update_N () como en hook_schema (). Simplemente refiriéndose al esquema de la siguiente manera:
function hook_update_N(&$sandbox) {
$schema = hook_schema();
$name = "foo";
$table = $schema["foo"];
db_create_table($name, $table);
}
Parece funcionar, pero al cambiar la tabla nuevamente, fallará si un usuario ejecuta las actualizaciones y puede ejecutar dos o más hook_update_N () s. Después de todo: el primer hook_update_N ya instalará la base de datos correcta y el segundo hook_update_M () intentará agregar / cambiar / alterar las columnas que ya estaban actualizadas.
Como tratas con esto?
Respuestas:
Tan solo una copia pegada de drupal.org. También debe agregar la definición de esquema a hook_schema.
fuente
mymodule_update_7101 () es bueno, junto con este gancho si agregamos un hook_install () para ejecutar lo mismo mientras que la instalación del módulo en lugar de la definición hook_schema () también funciona para mí.
fuente
hook_install()
no debería llamar a ninguna implementación de hook_update_N (), por un simple hecho:hook_install()
es para instalar un módulo por primera vez, lo que significa que no hay tablas para actualizar. Además, su código no funcionaría para las actualizaciones que necesitan un lote para ejecutarse.