説明なし

Gabriel Gosparo 78726f7938 README.md edited online with Bitbucket 8 年 前
Migrations d718baa949 Se agrego el numero de version en la muestra de la ejecucion 8 年 前
MigrationsBundle.php 154d35a5be Cambios menores 8 年 前
README.md 78726f7938 README.md edited online with Bitbucket 8 年 前
composer.json 13d4c5ab91 Inicio de las migraciones 8 年 前

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: recibe como parámetro el objeto de ejecución ($this). 
	        Se debe incluir en la función "preUp".
	        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.
	* setShowParameters: recibe como parámetro un TRUE/FALSE.
	        Se utiliza para mostrar los parámetros de cada una de las sentencias sql.
    * showResult: no recibe parámetros.
            Se encarga de mostrar como se ejecuto cada uno de las sentencias sql.
    * executeYaml: recibe como parámetro el nombre del archivo a incorporar. 
            Se toma como base el directorio app/DoctrineMigrations/ 

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
      ignore: true
      orupdate: true
    - 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

INSERT: El "replace" sobrescribe al "ignore" y el "orupdate" sobrescribe al "replace".

palabras claves:
    orupdate: crea un "insert ... or update ...". Si el registro no existe lo inserta, en caso contrario hace un update de  los datos.
    replace: crea un "replace into ...".
    ignore: crea un "insert ignore into ...".

Archivo base de incorporación: datosAIncorporar.yml

insert:
  groups: # nombre de la tabla
    - id: 1 # registro 1
      name: Admin  1
      roles: rol 1
      ignore: true
      orupdate: true
    - 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 añida en 1 profundidad: insertCompletoAnidado.yml

id: 4
name: {import: "insertCompletoAnidadoSoloName.yml"}
roles: rol 4
ignore: 1

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 añida 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 añida en 1 profundidad: deleteCompletoAnidado.yml

where: {import: "deleteCompletoAnidadoWhere.yml"}