O UXDM ajuda os desenvolvedores a migrar dados de um sistema ou formato para outro.

O UXDM pode ser facilmente instalado usando o Composer. Basta executar o seguinte comando da raiz do seu projeto.
composer require divineomega/uxdm
Se você nunca usou o Composer Dependence Manager antes, acesse o site do Composer para obter mais informações sobre como começar.
Crie um novo arquivo PHP para conter seu código de migração UXDM. Neste exemplo, chamaremos de user-csv-import.php . Lembre -se de adicionar require 'vendor/autoload.php' as instruções use relevante, se necessário.
Crie seus objetos de origem e destino. Este exemplo usa um destino de origem CSV e DOP (banco de dados).
$ 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 na linha de comando e obter uma boa barra de progresso.Consulte as seções abaixo para obter mais informações sobre os objetos de origem e destino disponíveis e exemplos de uso mais avançados.
Cada migração do UXDM requer um objeto de origem e pelo menos um objeto de destino. Eles determinam onde e como os dados são lidos e escritos. O pacote UXDM funciona com uma variedade de objetos de origem e destino, incluindo o seguinte.
Alguns deles estão embutidos no pacote UXDM central, enquanto outros estão disponíveis como pacotes separados.
Objetos de origem e destino podem ser usados em qualquer combinação. Os dados podem ser migrados de um CSV e inseridos para um banco de dados, com a mesma facilidade que os dados podem ser migrados de um banco de dados para um CSV.
Você também pode usar objetos de origem e destino semelhantes na mesma migração. Por exemplo, um uso comum do UXDM é usar uma fonte de PDO e um destino de PDO para transferir dados de um banco de dados para outro.
Consulte a página Fontes e destinos para obter mais fontes e destinos e documentação detalhada sobre seu uso.
Um exemplo de um banco de dados básico para o banco de dados UXDM Migration é mostrado abaixo.
$ 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 (); Essa migração moverá os campos id , email e name da tabela de users no banco de old-test , para a tabela new_users no banco de dados new-test , substituindo todos os registros existentes pelo mesmo id (o campo de chave).
Você pode usar o UXDM para validar os dados de origem. Se a validação falhar em meio a uma migração, a migração será interrompida e a ValidationException será lançada. No entanto, se ->validateBeforeMigrating() for chamado, todas as linhas de dados serão validadas preventivamente antes do início da migração.
O código abaixo mostra como validar vários 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 ();Essa migração validará os dados de origem corresponde às regras de validação definidas.
O UXDM usa o pacote Omega Validator. Veja sua documentação para todas as regras de validação disponíveis.
Esses exemplos mostram como o UXDM pode mapear nomes de campo de origem para destino.
$ migrator = new Migrator ;
$ migrator -> setSource ( $ pdoSource )
-> setDestination ( $ pdoDestination )
-> setFieldsToMigrate ([ ' id ' , ' email ' , ' name ' ])
-> setKeyFields ([ ' id ' ])
-> setFieldMap ([ ' name ' => ' full_name ' ])
-> withProgressBar ()
-> migrate (); Essa migração moverá os dados do campo name da fonte para o campo de destino full_name , enquanto ainda move os campos de id e email normalmente.
Às vezes, os dados que você deseja passar da fonte para o destino precisa se transformar. Isso pode estar alterando os itens existentes de dados, adicionando novos itens de dados ou removendo itens que você não precisa.
O UXDM permite criar um ou mais objetos transformadores e adicione -os à migração. Veja os seguintes exemplos de como usar transformadores para manipular seus dados.
Este exemplo mostra como você pode transformar itens de dados existentes durante a migração.
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 ();Essa migração garantirá que todos os campos de nomes tenham um caso consistente.
Este exemplo mostra como você pode adicionar novos itens de dados enquanto a migração está ocorrendo.
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 (); Essa migração adicionará um número aleatório a um campo chamado random_number para cada linha de dados. Isso será migrado para o banco de dados de destino junto com os outros campos.
Este exemplo demonstra como os itens de dados podem ser removidos de uma linha de dados. Você pode fazer isso se quiser usar seu valor, mas não o migrar para o 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 (); Essa migração obtém os dados do campo email na fonte, cria um novo item de dados email_hash que contém um MD5 do endereço de email e, em seguida, remove o item de dados email original. Este novo email_hash será migrado para o banco de dados de destino junto com os outros campos, excluindo o campo de email removido.