base de datos
Database backup | 4 opciones para crear copias de seguridad
Cuatro maneras para realizar una copia de tu base de datos Drupal
Antes de realizar cualquier tipo de actualización en tu proyecto de Drupal, es altamente recomendable, sacar una copia de tu base de datos actual, para evitar posibles pérdidas de información durante el proceso. Tienes varias opciones para extraer esta copia de la base de datos.
-
Copia de la base de datos utilizando Drush.
Para exportar la base de datos de tu proyecto Drupal, utilizando Drush, colócate en la carpeta raiz de tu proyecto, usando tu consola de comandos y a continuación, ejecuta el siguiente comando, sustituyendo el final, por el nombre que quieres para identificar tu copia de seguridad:
drush sql:dump --result-file=../mi_backup.sql
-
Copia de la base de datos desde la interfaz PhpMyAdmin.
Si tienes activado el administrador de Base de datos PhpMyAdmin, puedes exportar tu base de datos, a través de su interfaz. Para ello, sólo tienes que acceder a PhpMyAdmin, y a continuación seleccionar la base de datos que necesitas exportar; luego seleccionas el botón exportar, desde el menú superior de PhpMyAdmin y haces clic en continuar.
El resultado será un archivo con la extensión .sql, que se descargará automáticamente.
-
Exportar la base de datos utilizando la línea de comandos MySql.
Para extraeer una copia de tu base de datos, a través de los comandos MySql, deberás ejecutar la siguiente línea, sustituyendo los datos del usuario root, y tu bases de datos y el archivo.sql resultante.
mysqldump -u usuario -p base_de_datos > archivo.sql
-
Exportar una copia de la base de datos, usando el módulo Backup and Migrate.
Otra forma que nos ofrece Drupal, para exportar una copia de la base de datos, será a través del módulo Backup and Migrate, con el que podremos descargar, a través de la interfaz de Drupal, una copia completa de nuestro sitio web, en formato comprimido, que podremos importar en el entorno local o cualquier otro entorno que necesitemos.
Si quieres aprender a configurar y utilizar el Módulo Backup and Migrate HAZ CLIC AQUI
Tablas | Creación programáticamente en Drupal 9
A veces, cuando trabajamos en proyectos web utilizando Drupal, nos encontraremos con la necesidad de añadir en un solo módulo, todos los elementos que vamos a utilizar, ya sea porque se trate de un proyecto existente al que vamos a agregar una nueva funcionalidad, o por que este desarrollo pueda implementarse en varios proyectos a la vez, compartiéndolo con otros miembros del equipo de trabajo o de una comunidad de desarrolladores.
Ya hemos explicado Cómo crear un módulo en Drupal 9 y además ya tienes los conocimientos necesarios para saber Cómo crear formularios programáticamente en Drupal 9, por lo tanto, el próximo paso, antes de desarrollar módulos más complejos, sería descubrir la forma de añadir tablas en tu base de datos, para que puedas controlar los elementos que instalarás relacionados con tu módulo.
Por esta razón, hoy nos enfocaremos en la implementación de los requerimientos necesarios para crear, programáticamente, una o varias tablas, dependiendo de la necesidad que tengas para tu proyecto, utilizando el hook_schema(), dentro del archivo install en nuestro proyecto Drupal 9.
Requisitos:
Cómo crear tablas programáticamente en Drupal 9
Hoy aprenderemos a utilizar el archivo "MIMODULO.install" dentro de nuestro módulo personalizado. Si ponemos atención en la manera de implementarlo dentro de nuestros proyectos, tendremos el conocimiento suficiente para crear módulos más complejos, que nos permitirán la creación de contenidos directamente dentro de la base de datos de Drupal.
Un ejemplo práctico, que explicaremos en otro artículo y su respectivo video, sería un módulo que al instalarse, además de crear una tabla, con la configuración necesaria para guardar la información sobre los participantes a un curso, nos añadiera un formulario de inscripción, conectado a esta tabla, con el cual los usuarios pudieran rellenarla directamente.
Paso 1 Creación de tu módulo:
Lo primero que deberías saber es cómo crear un módulo personalizado. Esencialmente para este ejemplo, lo que necesitarás será una carpeta con el nombre de tu módulo y dentro el archivo con el nombre del módulo y la extensión, eje.: "mimodulo.info.yml"
name: Mi tabla description: 'Crea una tabla' package: drupaladicto type: module core_version_requirement: ^8.8.0 || ^9.0
Paso 2 Creación del archivo .install:
En el archivo "MIMODULO.install", es donde tendremos que indicarle a Drupal la configuración para que pueda crear nuestra tabla, para ello utilizaremos el "hook_schema()", que se encargará de interpretar los datos y creará dicha tabla.
/** * Implment hook_schema() */ function mi_tabla_schema() { $schema['mitabla'] = array( 'description' => 'Guarda los datos de los participantes', 'fields' => array( 'pid' => array( 'type' => 'serial', 'not null' => TRUE, 'description' => 'Primary Key: Identificador único del participante.', ), 'uid' => array( 'type' => 'int', 'not null' => TRUE, 'default' => 0, 'description' => "Creador de usuarios {users}.uid", ), 'nombre' => array( 'type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => '', 'description' => 'Nombre del participante.', ), 'apellido' => array( 'type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => '', 'description' => 'Apellido del participante.', ), 'edad' => array( 'type' => 'int', 'not null' => TRUE, 'default' => 0, 'size' => 'tiny', 'description' => 'Edad del participante.', ), ), 'primary key' => array('pid'), 'indexes' => array( 'nombre' => array('nombre'), 'apellido' => array('apellido'), 'edad' => array('edad'), ), ); return $schema; }
Explicación:
En la primera parte del hook_schema(), estamos definiendo el nombre de la tabla dentro de un array global, que es nuestro esquema $schema['mi_tabla'] = [ ], dentro de este array general, tendremos dos elementos fundamentales, que son el campo con la descripción de la tabla y a continuación otro array general, llamado "'fields' => array()", que será donde iremos añadiendo todos los campos, con sus respectivos atributos, como tipo de campo, si es nulo, si tendrá valor por defecto, etc.
$schema['mitabla'] = array( 'description' => 'Guarda los datos de los participantes', 'fields' => array( 'pid' => array( 'type' => 'serial', 'not null' => TRUE, 'description' => 'Primary Key: Identificadro único del participante.', ), 'uid' => array( 'type' => 'int', 'not null' => TRUE, 'default' => 0, 'description' => "Creator user's {users}.uid", ), 'nombre' => array(
Luego de definir todos los campos, encontraremos en la parte inferior del "hook_schema()", el lugar donde definiremos la clave primaria de nuestra tabla, acompañada de los índices.
), 'primary key' => array('pid'), 'indexes' => array( 'nombre' => array('nombre'), 'apellido' => array('apellido'), 'edad' => array('edad'), ),
Por último, y no menos importante, está el retorno del esquema, que es quien permitirá verdaderamente que Drupal pueda ejecutar toda la información que hemos añadido en el mismo.
); return $schema; }
Opcional Creación de datos por defecto:
Para nuestro ejemplo, además de implementar el hook_schema() y generar nuestra tabla, hemos decidido añadir además, algunos datos por defecto, que se colocarán en sus respectivos campos, al momento de instalar nuestro módulo.
Para realizar esta operación, hemos implementado el "hook_install()" target="_blank", que se ejecutará una vez se haya ejecutado el hook_schema() y esté generada nuestra tabla.
/** * hook_install() */ function mi_tabla_install() { $values = [ [ 'nombre' => 'Pepito', 'apellido' => 'Pérez', 'edad' => 30, 'uid' => 1, ], [ 'nombre' => 'Ana', 'apellido' => 'Medina', 'edad' => 28, 'uid' => 1, ], ]; $database = \Drupal::database(); $query = $database->insert('mitabla')->fields(['nombre', 'apellido', 'edad', 'uid']); foreach ($values as $participante) { $query->values($participante); } $query->execute(); }
Explicación:
En la primera parte de este "hook_install()", estamos pasándole a drupal los valores que se añadirán a los campos de nuestra tabla, dentro del array "$values = [ ] ", debes asegurarte que cada campo corresponde, con los que haz definido en dentro del $schema[ ].
$values = [ [ 'nombre' => 'Pepito', 'apellido' => 'Pérez', 'edad' => 30, 'uid' => 1, ], [ 'nombre' => 'Ana', 'apellido' => 'Medina', 'edad' => 28, 'uid' => 1, ], ];
En la siguiente parte, utilizando el servicio "\Drupal::database();", realizamos una consulta a la base de datos y mediante un insert, añadimos a la tabla, los campos correspondientes dentro del array fields, luego recorremos todos valores, utilizando el foreach y por último, ejecutamos la consulta.
$database = \Drupal::database(); $query = $database->insert('mitabla')->fields(['nombre', 'apellido', 'edad', 'uid']); foreach ($values as $participante) { $query->values($participante); } $query->execute();
Symfony Postgree | Datatype mismatch: 7 ERROR: column "xxx" cannot be cast automatically to type boolean
Cuando trabajas con Symfony y Postgree, es posible que al intentar cambiar el tipo de valor para una tabla o para una columna, te encuentres con este error, que no te permitirá realizar la actualización al ejecutar el comando doctrine:migrations:migrate.
SQLSTATE[42804]: Datatype mismatch: 7 ERROR: column "xxx" cannot be cast automatically to type boolean HINT: You might need to specify "USING xxx::boolean".
Cómo borrar mysql o mariadb definitivamente | Permanently removing mysql
Algunas veces, instalamos mysql o mariadb y por alguna razón, necesitamos borrarlo, ya sea para reinstalarlo y corregir algún error de configuración o por conflictos con otra apliación, a continuación te muestro los pasos para borrarlo, con todos sus archivos en Ubuntu
Extraer roles del usuario Drupal 8
Para comprobar el o los roles asignados a un usuario logueado....
The metadata storage is not up to date, please run the sync-metadata-storage command to fix this issue
A partir de la versión 5 de Symfony, cuando utilizamos el motor de base de datos con MariaDB, nos encontraremos con un error de actualización de datos, generalemente después de ejecutar los comandos para generar las entidades (console make:entity / console doctrine:migrations:migrate). Para corregir el error sigue los siguientes pasos.