Sem descrição

Guillermo Espinoza 20f75ea4f9 Update .gitlab-ci.yml há 5 anos atrás
.gitlab f28fb97895 Directory .gitlab added há 6 anos atrás
Command 8b39b8738e Agregado del comando para exportar datos desde una tabla a un archivo yaml há 7 anos atrás
Migrations 5b3054d76a Se agregaron las palabras claves replace, insertopupdate, insertignore há 7 anos atrás
keys db2d82800b Agregado drone há 7 anos atrás
.drone.yml 3ffe7909ad Agregado del paso de tags a gogs há 7 anos atrás
.gitlab-ci.yml 20f75ea4f9 Update .gitlab-ci.yml há 5 anos atrás
MigrationsBundle.php 154d35a5be Cambios menores há 8 anos atrás
README.md 1fb5025b4a Modificacion del readme há 7 anos atrás
composer.json cf4e6c2ec7 composer.json updated há 7 anos atrás

README.md

MigrationsBundle

Installation

composer.json:

"repositories": [
    {
        "type": "vcs",
        "url":  "ssh://git@bitbucket.org/ikflowdat/migrations.git"
    }
],
"require": {
    "ik/migrations-bundle": "dev-master"
},

app/AppKernel.php:

public function registerBundles()
{
    $bundles = [
        new MigrationsBundle\MigrationsBundle()
    ];
    .
    .
}

Class

  • MigrationsBundle\MigrationsBase: Clase de la cual se debe extender para poder hacer migraciones interpretando un yaml. Esta clase proporciona los siguientes métodos que se ejecutan en el siguiente orden: Php 1- preUp: se utiliza para validaciones y sentencias DML. 2- up: se utiliza principalmente para sentencias DDL. 3- postUp: se utiliza para validaciones y sentencias DML. 4- preDown: se utiliza para validaciones y sentencias DML. 5- down: se utiliza principalmente para sentencias DDL. 6- postDown: se utiliza para validaciones y sentencias DML.

Ademas se pueden utilizar las siguientes funciones:

	* deleteMigrationsVersion: Borra la versión de la tabla de migraciones para 
            que no tire error. Esto se utiliza en caso de que se deba correr 
            varias veces la misma migración. Se debe incluir en la función "preUp".	       
        Recibe como parámetro el objeto de ejecución ($this).
    * executeSQL: Ejecuta un sql en al base de datos. 
        Recibe como parámetros el sql, el tipo de sentencia (INSERT/
            UPDATE/DELETE) y un array con los valores a reemplazar en el sql.
    * executeYaml: Ingresa los valores desde un archivo yaml. Se toma como base 
            el directorio app/DoctrineMigrations/
        Recibe como parámetro el nombre del archivo a incorporar. 
    * existFieldInTable: Verifica si existe un campo dentro de una tabla.
        Recibe como parámetro el nombre de la tabla y el nombre del campo.
    * existFieldType: Verifica si existe un campo con un cierto tipo de dato dentro de una tabla.           
        Recibe como parámetro el nombre de la tabla, el nombre del campo y el tipo de dato.   
    * existTable: Verifica si existe una tabla.        
        Recibe como parámetro el nombre de la tabla.
    * existValueInTable: Verifica si existe un valor en la tabla.
        Recibe como parámetro el nombre de la tabla, el nombre del campo y el valor a buscar.
    * getAutoIncrementValue: Retorna el valor del auto_increment de una tabla.
        Recibe como parámetro el nombre de la tabla.
    * getDataBaseName: Retorna el nombre de la base a la cual estoy conectado.
    * getMigrationNumber: Función que obtiene el número de migración que estoy ejecutantdo.
        Recibe como parámetro el objeto de ejecución ($this).
    * setAutoIncrementValue: Setea el valor del auto_increment de una tabla.
        Recibe como parámetro el nombre de la tabla y valor a setear.
    * setShowParameters: Se utiliza para mostrar los parámetros de cada una de las
            sentencias sql. 
        Recibe como parámetro un TRUE/FALSE.
    * showResult: Se encarga de mostrar como se ejecuto cada uno de las sentencias sql.
        No recibe parámetros.            
    * verifyMigrationsVersion: Verifica si la migración ya se incorporó.
        Recibe como parámetro el objeto de ejecución ($this).

Execution

Una versión

$ bin/console doctrine:migrations:execute <numberOfMigrations>

Todas las versiones

$ bin/console doctrine:migrations:migrate

Example YAML

Palabras claves de importación: son palabras que importan los datos desde otros archivos que pueden estar en otros directorios. Siempre se toma como base app/DoctrineMigrations.

   import: importa el valor de un campo de un registro.
   importKey: importa un registro completo. Este archivo puede contener la 
palabra clave "import".

Ejemplo completo datosAIncorporar.yml

insert:
  groups: # nombre de la tabla 
    - id: 1 # registro 1
      name: Admin  1
      roles: rol 1
    - id: 2 # registro 2
      name: {import: "insertSoloName.yml"}
      replace: 1
      roles: rol 2
    - {importkey: "insertCompleto.yml"} # registro 3
    - {importkey: "insertCompletoAnidado.yml"} # registro 4
replace:
  groups: # nombre de la tabla 
    - id: 1 # registro 1
      name: Admin  1
      roles: rol 1
    - id: 2 # registro 2
      name: {import: "insertSoloName.yml"}
      replace: 1
      roles: rol 2
    - {importkey: "insertCompleto.yml"} # registro 3
    - {importkey: "insertCompletoAnidado.yml"} # registro 4
insertignore:
  groups: # nombre de la tabla 
    - id: 1 # registro 1
      name: Admin  1
      roles: rol 1
    - id: 2 # registro 2
      name: {import: "insertSoloName.yml"}
      replace: 1
      roles: rol 2
    - {importkey: "insertCompleto.yml"} # registro 3
    - {importkey: "insertCompletoAnidado.yml"} # registro 4
insertorupdate:
  groups: # nombre de la tabla 
    - id: 1 # registro 1
      name: Admin  1
      roles: rol 1
    - id: 2 # registro 2
      name: {import: "insertSoloName.yml"}
      replace: 1
      roles: rol 2
    - {importkey: "insertCompleto.yml"} # registro 3
    - {importkey: "insertCompletoAnidado.yml"} # registro 4
update: # nombre de la tabla
  groups:
    - name: "Admin update 1" # registro 1
      where: id = 1
    - where: id = 2
      name: {import: "updateSoloName.yml"} # registro 2
    - {importkey: "updateCompleto.yml"} # registro 3
    - {importkey: "updateCompletoAnidado.yml"} # registro 4
delete: # nombre de la tabla
  groups:
    - where: id = 1 # registro 1
    - where: {import: "deleteSoloWhere.yml"} # registro 2
    - {importkey: "deleteCompleto.yml"} # registro 3
    - {importkey: "deleteCompletoAnidado.yml"} # registro 4

Explicación de cada uno de las sentencias

Archivo base de incorporación: datosAIncorporar.yml

insert:
  groups: # nombre de la tabla
    - id: 1 # registro 1
      name: Admin  1
      roles: rol 1
    - id: 2 # registro 2
      name: {import: "insertSoloName.yml"} 
      replace: 1
      roles: rol 2
    - {importkey: "insertCompleto.yml"} # registro 3 
    - {importkey: "insertCompletoAnidado.yml"} # registro 4

Archivo que contiene solo el valor del campo name: insertSoloName.yml

Admin 2

Archivo que contiene la estructura de un insert: insertCompleto.yml

id: 3
name: "Admin 3"
roles: rol 3

Archivo que contiene la estructura de un insert y se anida en 1 profundidad: insertCompletoAnidado.yml

id: 4
name: {import: "insertCompletoAnidadoSoloName.yml"}

UPDATE: tiene la particularidad de que el where se debe escribir completo. Archivo base de incorporación: datosAIncorporar.yml

update:
  groups: # nombre de la tabla
    - name: "Admin update 1" # registro 1
      where: id = 1
    - where: id = 2    # registro 2
      name: {import: "updateSoloName.yml"}
    - {importkey: "updateCompleto.yml"} # registro 3
    - {importkey: "updateCompletoAnidado.yml"} # registro 4

Archivo que contiene solo el valor del campo name: updateSoloName.yml

Admin update 222222

Archivo que contiene la estructura de un update: updateCompleto.yml

where: id = 3
name: "Admin update 3"

Archivo que contiene la estructura de un udpate y se anida en 1 profundidad: updateCompletoAnidado.yml

where: id = 4
name: {import: "updateCompletoAnidadoSoloName.yml"}

DELETE: tiene la particularidad de que el where se debe escribir completo. Archivo base de incorporación: datosAIncorporar.yml

delete:
  groups: # nombre de la tabla
    - where: id = 1 # registro 1
    - where: {import: "deleteSoloWhere.yml"} # registro 2
    - {importkey: "deleteCompleto.yml"} # registro 3
    - {importkey: "deleteCompletoAnidado.yml"} # registro 4

Archivo que contiene solo el valor del campo name: deleteSoloWhere.yml

id = 2

Archivo que contiene la estructura de un delete: deleteCompleto.yml

where: id = 3

Archivo que contiene la estructura de un delete y se anida en 1 profundidad: deleteCompletoAnidado.yml

where: {import: "deleteCompletoAnidadoWhere.yml"}