UXDM ayuda a los desarrolladores migrar datos de un sistema o formato a otro.

UXDM se puede instalar fácilmente usando el compositor. Simplemente ejecute el siguiente comando desde la raíz de su proyecto.
composer require divineomega/uxdm
Si nunca ha utilizado el Administrador de dependencias del compositor antes, diríjase al sitio web del compositor para obtener más información sobre cómo comenzar.
Cree un nuevo archivo PHP para contener su código de migración UXDM. En este ejemplo, lo llamaremos user-csv-import.php . Recuerde agregar require 'vendor/autoload.php' y declaraciones use relevantes, si es necesario.
Cree sus objetos de origen y destino. Este ejemplo utiliza una fuente CSV y un destino PDO (base de datos).
$ csvSource = new CSVSource ( ' users.csv ' );
$ pdoDestination = new PDODestination ( new PDO ( ' mysql:dbname=test-database;host=127.0.0.1 ' , ' root ' , ' password ' ), ' users ' ); $ migrator = new Migrator ;
$ migrator -> setSource ( $ csvSource )
-> setDestination ( $ pdoDestination )
-> setFieldsToMigrate ([ ' id ' , ' email ' , ' name ' ])
-> setKeyFields ([ ' id ' ])
-> withProgressBar ()
-> migrate ();php user-csv-import.php desde la línea de comandos y obtendremos una buena barra de progreso.Consulte las secciones a continuación para obtener más información sobre los objetos de origen y destino disponibles, y ejemplos de uso más avanzados.
Cada migración UXDM requiere un objeto de origen y al menos un objeto de destino. Estos determinan dónde y cómo se leen y escriben los datos. El paquete UXDM funciona con una variedad de objetos de origen y destino, incluido el siguiente.
Algunos de estos están integrados en el paquete Core UXDM, mientras que otros están disponibles como paquetes separados.
Los objetos de origen y destino se pueden usar en cualquier combinación. Los datos se pueden migrar de un CSV e insertarse en una base de datos, tan fácilmente como los datos se pueden migrar de una base de datos a un CSV.
También puede usar objetos de origen y destino similares en la misma migración. Por ejemplo, un uso común de UXDM es usar una fuente PDO y un destino PDO para transferir datos de una base de datos a otra.
Consulte la página de fuentes y destinos para obtener más fuentes y destinos, y documentación detallada sobre su uso.
A continuación se muestra un ejemplo de una base de datos básica para la migración de la base de datos UXDM.
$ pdoSource = new PDOSource ( new PDO ( ' mysql:dbname=old-test;host=127.0.0.1 ' , ' root ' , ' password123 ' ), ' users ' );
$ pdoDestination = new PDODestination ( new PDO ( ' mysql:dbname=new-test;host=127.0.0.1 ' , ' root ' , ' password456 ' ), ' new_users ' );
$ migrator = new Migrator ;
$ migrator -> setSource ( $ pdoSource )
-> setDestination ( $ pdoDestination )
-> setFieldsToMigrate ([ ' id ' , ' email ' , ' name ' ])
-> setKeyFields ([ ' id ' ])
-> withProgressBar ()
-> migrate (); Esta migración moverá los campos de id , email y name de la tabla de users en la base de datos de la old-test , a la tabla new_users en la base de datos new-test , reemplazando cualquier registro existente con la misma id (el campo clave).
Puede usar UXDM para validar los datos de origen. Si la validación falla a través de una migración, la migración se detendrá y se lanzará una ValidationException . Sin embargo, si ->validateBeforeMigrating() se llama, todas las filas de datos se validarán preventivamente antes de que comience la migración.
El siguiente código muestra cómo validar varios campos.
$ pdoSource = new PDOSource ( new PDO ( ' mysql:dbname=old-test;host=127.0.0.1 ' , ' root ' , ' password123 ' ), ' users ' );
$ pdoDestination = new PDODestination ( new PDO ( ' mysql:dbname=new-test;host=127.0.0.1 ' , ' root ' , ' password456 ' ), ' new_users ' );
$ migrator = new Migrator ;
$ migrator -> setSource ( $ pdoSource )
-> setDestination ( $ pdoDestination )
-> setFieldsToMigrate ([ ' id ' , ' email ' , ' name ' ])
-> setValidationRules ([
' id ' => [ new Required (), new IsNumeric ()],
' email ' => [ new Required (), new IsString (), new IsEmail ()],
' name ' => [ new Required (), new IsString ()],
])
// ->validateBeforeMigrating()
-> setKeyFields ([ ' id ' ])
-> withProgressBar ()
-> migrate ();Esta migración validará los datos de origen coinciden con las reglas de validación definidas.
UXDM usa el paquete de validador OMEGA. Consulte su documentación para todas las reglas de validación disponibles.
Estos ejemplos muestran cómo UXDM puede mapear los nombres de campo desde la fuente hasta el destino.
$ migrator = new Migrator ;
$ migrator -> setSource ( $ pdoSource )
-> setDestination ( $ pdoDestination )
-> setFieldsToMigrate ([ ' id ' , ' email ' , ' name ' ])
-> setKeyFields ([ ' id ' ])
-> setFieldMap ([ ' name ' => ' full_name ' ])
-> withProgressBar ()
-> migrate (); Esta migración moverá los datos del campo name origen al campo full_name de destino, mientras se mueve normalmente la id y los campos email .
A veces, los datos que desea mover del origen al destino necesita transformarse. Esto puede cambiar los elementos de datos existentes, agregar nuevos elementos de datos o eliminar elementos que no necesita.
UXDM le permite crear uno o más objetos de transformador y agregarlos a la migración. Consulte los siguientes ejemplos de cómo usar transformadores para manipular sus datos.
Este ejemplo muestra cómo puede transformar los elementos de datos existentes durante la migración.
class NameCaseTransformer implements TransformerInterface
{
public function transform ( DataRow $ dataRow ): void
{
$ nameDataItem = $ dataRow -> getDataItemByFieldName ( ' name ' );
$ nameDataItem -> value = ucwords ( strtolower ( $ nameDataItem -> value ));
}
}
$ migrator = new Migrator ;
$ migrator -> setSource ( $ pdoSource )
-> setDestination ( $ pdoDestination )
-> setFieldsToMigrate ([ ' id ' , ' email ' , ' name ' ])
-> setKeyFields ([ ' id ' ])
-> addTransformer ( new NameCaseTransformer ())
-> withProgressBar ()
-> migrate ();Esta migración asegurará que todos los campos de nombres tengan un caso consistente.
Este ejemplo muestra cómo puede agregar nuevos elementos de datos mientras se lleva a cabo la migración.
class AddRandomNumberTransformer implements TransformerInterface
{
public function transform ( DataRow & $ dataRow ): void
{
$ dataRow -> addDataItem ( new DataItem ( ' random_number ' , rand ( 1 , 1000 )));
}
}
$ migrator = new Migrator ;
$ migrator -> setSource ( $ pdoSource )
-> setDestination ( $ pdoDestination )
-> setFieldsToMigrate ([ ' id ' , ' email ' , ' name ' ])
-> setKeyFields ([ ' id ' ])
-> addTransformer ( new AddRandomNumberTransformer ())
-> withProgressBar ()
-> migrate (); Esta migración agregará un número aleatorio a un campo llamado random_number para cada fila de datos. Esto se migrará a la base de datos de destino junto con los otros campos.
Este ejemplo demuestra cómo se pueden eliminar los elementos de datos de una fila de datos. Es posible que desee hacer esto si desea usar su valor, pero no lo migra al destino.
class EmailToHashTransformer implements TransformerInterface
{
public function transform ( DataRow $ dataRow ): void
{
$ emailDataItem = $ dataRow -> getDataItemByFieldName ( ' email ' );
$ dataRow -> addDataItem ( new DataItem ( ' email_hash ' , md5 ( $ emailDataItem -> value )));
$ dataRow -> removeDataItem ( $ emailDataItem );
}
}
$ migrator = new Migrator ;
$ migrator -> setSource ( $ pdoSource )
-> setDestination ( $ pdoDestination )
-> setFieldsToMigrate ([ ' id ' , ' email ' , ' name ' ])
-> setKeyFields ([ ' id ' ])
-> addTransformer ( new EmailToHashTransformer ())
-> withProgressBar ()
-> migrate (); Esta migración obtiene los datos del campo email en la fuente, crea un nuevo elemento de datos de email_hash que contiene un MD5 de la dirección de correo electrónico y luego elimina el elemento de datos email original. Este nuevo email_hash se migrará a la base de datos de destino junto con los otros campos, excluyendo el campo email eliminado.