Migración

El ORM PIPE permite la gestión de DDL (Lenguaje de Definición de Datos) por medio de migraciones.

#1 Creación de tabla.

<?php

use PIPE\Migracion\Atributo;
use PIPE\Migracion\Migracion;

Migracion::tabla('telefonos')
    ->enteroGrande('id', (new Atributo)->sinSigno()->autoincrementable()->llavePrimaria())
    ->cadena('numero', 20, (new Atributo)->noNulo())
    ->marcaTiempo('creado_en', (new Atributo)->nulo())
    ->marcaTiempo('actualizado_en', (new Atributo)->nulo())
    ->marcaTiempo('eliminado_en', (new Atributo)->nulo())
    ->crearTabla();

Migracion::tabla('usuarios')
    ->enteroGrande('id', (new Atributo)->sinSigno()->autoincrementable())
    ->enteroGrande('telefono_id', (new Atributo)->sinSigno())
    ->cadena('nombres', 255, (new Atributo)->noNulo())
    ->cadena('apellidos', 255, (new Atributo)->noNulo())
    ->cadena('estado', 8, (new Atributo)->chequeo("estado IN ('activo', 'inactivo')"))
    ->enumerado('verificado', ['SÍ', 'NO'], (new Atributo)->predeterminado('NO'))
    ->personalizado('fecha_nacimiento DATE CHECK (fecha_nacimiento <= CURRENT_DATE())')
    ->marcaTiempo('creado_en', (new Atributo)->nulo())
    ->marcaTiempo('actualizado_en', (new Atributo)->nulo())
    ->marcaTiempo('eliminado_en', (new Atributo)->nulo())
    ->restriccion('llave_primaria_id')
    ->llavePrimaria('id') // Permite enviar un arreglo de llaves primarias.
    ->restriccion('llave_foranea_telefono_id')
    ->llaveForanea('telefono_id', 'telefonos', 'id', Atributo::RESTRICCION, Atributo::CASCADA)
    ->crearTabla(true); // Al enviar el parámetro true, indicamos (CREATE TABLE IF NOT EXISTS).

#2 Borrado de tabla.

<?php

use PIPE\Migracion\Migracion;

Migracion::tabla('usuarios')->borrarTabla();

// Al enviar el primer parámetro true, indicamos (DROP TABLE IF EXISTS).
Migracion::tabla('usuarios')->borrarTabla(true);

// Al enviar el segundo parámetro true, indicamos el borrado en cascada (CASCADE).
Migracion::tabla('usuarios')->borrarTabla(true, true);

// Podemos eliminar varias tablas de la siguiente manera.
Migracion::tabla(['usuarios', 'telefonos'])->borrarTabla();

#3 Creación de índice.

<?php

use PIPE\Migracion\Migracion;

Migracion::tabla('usuarios')->crearIndice('nombres');

// Podemos definir el nombre del índice de la siguiente manera.
Migracion::tabla('usuarios')->crearIndice('nombres', 'indice_nombres');

// Podemos crear índices a varios campos de la siguiente manera.
Migracion::tabla('usuarios')->crearIndice(['nombres', 'apellidos']);

#4 Creación de índice único.

<?php

use PIPE\Migracion\Migracion;

Migracion::tabla('usuarios')->crearIndiceUnico('nombres');

// Podemos definir el nombre del índice único de la siguiente manera.
Migracion::tabla('usuarios')->crearIndiceUnico('nombres', 'indice_unico_nombres');

// Podemos crear índices únicos a varios campos de la siguiente manera.
Migracion::tabla('usuarios')->crearIndiceUnico(['nombres', 'apellidos']);

#5 Borrado de índice.

<?php

use PIPE\Migracion\Migracion;

Migracion::tabla('usuarios')->borrarIndice('indice_unico_nombres');

#6 Borrado de restricción.

<?php

use PIPE\Migracion\Migracion;

Migracion::tabla('usuarios')->borrarRestriccion('llave_foranea_telefono_id');

// Al enviar el segundo parámetro true, indicamos (DROP CONSTRAINT IF EXISTS).
Migracion::tabla('usuarios')->borrarRestriccion('llave_foranea_telefono_id', true);

// Al enviar el tercer parámetro true, indicamos el borrado en cascada (CASCADE).
Migracion::tabla('usuarios')->borrarRestriccion('llave_foranea_telefono_id', true, true);

#7 Creación de llave primaria.

<?php

use PIPE\Migracion\Migracion;

Migracion::tabla('usuarios')->crearLlavePrimaria('id');

// Podemos definir el nombre de la restricción de la siguiente manera.
Migracion::tabla('usuarios')->crearLlavePrimaria('id', 'llave_primaria_id');

// Podemos crear la llave primaria con campos combinados de la siguiente manera.
Migracion::tabla('usuarios')->crearLlavePrimaria(['id', 'codigo']);

#8 Borrado de llave primaria.

<?php

use PIPE\Migracion\Migracion;

Migracion::tabla('usuarios')->borrarLlavePrimaria();

#9 Creación de llave foránea.

<?php

use PIPE\Migracion\Atributo;
use PIPE\Migracion\Migracion;

Migracion::tabla('usuarios')->crearLlaveForanea('telefono_id', 'telefonos', 'id', 'llave_foranea_telefono_id', Atributo::RESTRICCION, Atributo::CASCADA);

#10 Borrado de llave foránea.

<?php

use PIPE\Migracion\Migracion;

Migracion::tabla('usuarios')->borrarLlaveForanea('llave_foranea_telefono_id');

#11 Creación de campo.

<?php

use PIPE\Migracion\Atributo;
use PIPE\Migracion\Migracion;

Migracion::tabla('usuarios')->crearCampo('apodo', Atributo::CADENA, (new Atributo)->nulo());

// Podemos definir la longitud del campo de la siguiente manera.
Migracion::tabla('usuarios')->crearCampo('apodo', Atributo::CADENA, (new Atributo)->nulo(), 255);

// En MySQL, podemos ubicar el campo de primero de la siguiente manera.
Migracion::tabla('usuarios')->crearCampo('apodo', Atributo::CADENA, (new Atributo)->nulo(), 255, true);

// En MySQL, también podemos ubicarlo después de un campo definido de la siguiente manera.
Migracion::tabla('usuarios')->crearCampo('apodo', Atributo::CADENA, (new Atributo)->nulo(), 255, 'nombres');

#12 Cambio de campo.

<?php

use PIPE\Migracion\Atributo;
use PIPE\Migracion\Migracion;

Migracion::tabla('usuarios')->cambiarCampo('apodo', 'nombre_pila', Atributo::CADENA, (new Atributo)->noNulo(), 100);

#13 Borrado de campo.

<?php

use PIPE\Migracion\Migracion;

Migracion::tabla('usuarios')->borrarCampo('nombre_pila');

A continuación, se presenta un listado de los 63 métodos disponibles en la clase Migracion para la gestión de DDL en los motores de base de datos MySQL, PostgreSQL, SQLite y SQL Server.

Método Tipo de dato MySQL PostgreSQL SQLite SQL Server
- Soporte
borrarCampo() -
borrarIndice() -
borrarLlaveForanea() -
borrarLlavePrimaria() -
borrarRestriccion() -
borrarTabla() -
cambiarCampo() -
crearCampo() -
crearIndice() -
crearIndiceUnico() -
crearLlaveForanea() -
crearLlavePrimaria() -
crearTabla() -
espacioTabla() -
llaveForanea() -
llavePrimaria() -
motor() -
personalizado() -
restriccion() -
tabla() -
Enteros Soporte
enteroMuyPequeno() TYNYINT
enteroPequeno() SMALLINT
enteroMediano() MEDIUMINT
entero() INT / INTEGER
enteroGrande() BIGINT
serialPequeno() SMALLSERIAL
serial() SERIAL
serialGrande() BIGSERIAL
Decimales Soporte
decimal() DECIMAL(p,s)
numerico() NUMERIC(p,s)
flotante() FLOAT
doble() DOUBLE
doblePrecision() DOUBLE PRECISION
real() REAL
monetario() MONEY
monetarioPequeno() SMALLMONEY
Cadenas de texto Soporte
caracter() CHAR(n)
cadena() VARCHAR(n)
nCaracter() NCHAR(n)
nCadena() NVARCHAR(n)
textoMuyPequeno() TINYTEXT
textoMediano() MEDIUMTEXT
texto() TEXT
textoLargo() LONGTEXT
Marcas de tiempo Soporte
fecha() DATE
fechaHora() DATETIME
fechaHora2() DATETIME2
marcaTiempo() TIMESTAMP
hora() TIME
anio() YEAR
Lógicos Soporte
booleano() BOOLEAN
digitoBinario() BIT
Binarios Soporte
binario() BINARY(n)
binarioVariable() VARBINARY(n)
binarioGrande() BLOB
binarioMatriz() BYTEA
Geométricos Soporte
coordenada() POINT
coordenadaLinea() LINESTRING
poligono() POLYGON
Otros Soporte
enumerado() ENUM(n...)
conjunto() SET(n...)
json() JSON
jsonb() JSONB

A continuación, se presenta un listado de los 10 métodos disponibles en la clase Atributo para la gestión de DDL en los motores de base de datos MySQL, PostgreSQL, SQLite y SQL Server.

Método Atributo MySQL PostgreSQL SQLite SQL Server
- Soporte
autoincrementable() AUTO_INCREMENT / GENERATED BY DEFAULT AS IDENTITY / AUTOINCREMENT / IDENTITY
chequeo() CHECK
cotejamiento() COLLATE
identidad() IDENTITY
llavePrimaria() PRIMARY KEY
noNulo() NOT NULL
nulo() NULL
predeterminado() DEFAULT
sinSigno() UNSIGNED
unico() UNIQUE

A continuación, se presenta un listado de las 48 constantes disponibles en la clase Atributo para la gestión de DDL en los motores de base de datos MySQL, PostgreSQL, SQLite y SQL Server.

Constante Tipo de dato MySQL PostgreSQL SQLite SQL Server
Enteros Soporte
Atributo::ENTERO_MUY_PEQUENO TYNYINT
Atributo::ENTERO_PEQUENO SMALLINT
Atributo::ENTERO_MEDIANO MEDIUMINT
Atributo::ENTERO INT / INTEGER
Atributo::ENTERO_GRANDE BIGINT
Atributo::SERIAL_PEQUENO SMALLSERIAL
Atributo::SERIAL SERIAL
Atributo::SERIAL_GRANDE BIGSERIAL
Decimales Soporte
Atributo::DECIMAL DECIMAL(p,s)
Atributo::NUMERICO NUMERIC(p,s)
Atributo::FLOTANTE FLOAT
Atributo::DOBLE DOUBLE
Atributo::DOBLE_PRECISION DOUBLE PRECISION
Atributo::REAL REAL
Atributo::MONETARIO MONEY
Atributo::MONETARIO_PEQUENO SMALLMONEY
Cadenas de texto Soporte
Atributo::CARACTER CHAR(n)
Atributo::CADENA VARCHAR(n)
Atributo::N_CARACTER NCHAR(n)
Atributo::N_CADENA NVARCHAR(n)
Atributo::TEXTO_MUY_PEQUENO TINYTEXT
Atributo::TEXTO_MEDIANO MEDIUMTEXT
Atributo::TEXTO TEXT
Atributo::TEXTO_LARGO LONGTEXT
Marcas de tiempo Soporte
Atributo::FECHA DATE
Atributo::FECHA_HORA DATETIME
Atributo::FECHA_HORA_2 DATETIME2
Atributo::MARCA_TIEMPO TIMESTAMP
Atributo::HORA TIME
Atributo::ANIO YEAR
Lógicos Soporte
Atributo::BOOLEANO BOOLEAN
Atributo::DIGITO_BINARIO BIT
Binarios Soporte
Atributo::BINARIO BINARY(n)
Atributo::BINARIO_VARIABLE VARBINARY(n)
Atributo::BINARIO_GRANDE BLOB
Atributo::BINARIO_MATRIZ BYTEA
Geométricos Soporte
Atributo::COORDENADA POINT
Atributo::COORDENADA_LINEA LINESTRING
Atributo::POLIGONO POLYGON
Otros Soporte
Atributo::ENUMERADO ENUM(n...)
Atributo::CONJUNTO SET(n...)
Atributo::JSON JSON
Atributo::JSONB JSONB
Atributo::CASCADA CASCADE
Atributo::NULO SET NULL
Atributo::PREDETERMINADO SET DEFAULT
Atributo::NO_ACCION NO ACTION
Atributo::RESTRICCION RESTRICT

Si utilizas el Modelo para interactuar con los datos de la base de datos, tendrás la ventaja de poder omitir las convenciones que tiene el ORM PIPE y adaptarse a la estructura que tenga tu tabla en la base de datos, ya que el Constructor de Consultas se adapta por defecto a las convenciones.