UXDM aide les développeurs à migrer des données d'un système ou d'un format vers un autre.

UXDM peut être facilement installé à l'aide du compositeur. Exécutez simplement la commande suivante à partir de la racine de votre projet.
composer require divineomega/uxdm
Si vous n'avez jamais utilisé le Composer Dependency Manager auparavant, rendez-vous sur le site Web du compositeur pour plus d'informations sur la façon de commencer.
Créez un nouveau fichier PHP pour contenir votre code de migration UXDM. Dans cet exemple, nous l'appellerons user-csv-import.php . N'oubliez pas d'ajouter require 'vendor/autoload.php' et des instructions use pertinentes, si nécessaire.
Créez vos objets source et destination. Cet exemple utilise une destination CSV Source et PDO (base de données).
$ 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 à partir de la ligne de commande et obtiendrons une belle barre de progrès.Voir les sections ci-dessous pour plus d'informations sur les objets source et de destination disponibles et des exemples d'utilisation plus avancés.
Chaque migration UXDM nécessite un objet source et au moins un objet de destination. Ceux-ci déterminent où et comment les données sont lues et écrites. Le package UXDM fonctionne avec une variété d'objets source et de destination, y compris les suivants.
Certains d'entre eux sont intégrés au package UXDM de base, tandis que d'autres sont disponibles en packages séparés.
Les objets source et de destination peuvent être utilisés dans n'importe quelle combinaison. Les données peuvent être migrées à partir d'un CSV et insérées dans une base de données, tout aussi facilement que les données peuvent être migrées d'une base de données vers un CSV.
Vous pouvez également utiliser des objets source et de destination similaires dans la même migration. Par exemple, une utilisation courante d'UXDM consiste à utiliser une source de source et une destination PDO pour transférer des données d'une base de données à une autre.
Veuillez consulter la page Sources et destinations pour plus de sources et de destinations, et une documentation détaillée sur leur utilisation.
Un exemple de base de données de base à la migration UXDM de la base de données est illustré ci-dessous.
$ 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 (); Cette migration déplacera les champs id , email et name de la table des users dans la base de données old-test , vers la table new_users dans la base de données new-test , en remplaçant tous les enregistrements existants par le même id (le champ de clé).
Vous pouvez utiliser UXDM pour valider les données source. Si la validation échoue à mi-chemin à travers une migration, la migration s'arrête et une ValidationException sera lancée. Cependant, si ->validateBeforeMigrating() est appelé, toutes les lignes de données seront validées de manière préventive avant le début de la migration.
Le code ci-dessous montre comment valider divers champs.
$ 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 ();Cette migration validera les données source correspond aux règles de validation définies.
UXDM utilise le package de validateur Omega. Voir sa documentation pour toutes les règles de validation disponibles.
Ces exemples montrent comment UXDM peut mapper les noms de champ de la source à la destination.
$ migrator = new Migrator ;
$ migrator -> setSource ( $ pdoSource )
-> setDestination ( $ pdoDestination )
-> setFieldsToMigrate ([ ' id ' , ' email ' , ' name ' ])
-> setKeyFields ([ ' id ' ])
-> setFieldMap ([ ' name ' => ' full_name ' ])
-> withProgressBar ()
-> migrate (); Cette migration déplacera les données du champ name Source dans le champ full_name de destination, tout en déplaçant normalement les champs id et email .
Parfois, les données que vous souhaitez passer de la source à la destination doivent être transformées. Cela peut être de modifier les éléments de données existants, d'ajouter de nouveaux éléments de données ou de supprimer les éléments dont vous n'avez pas besoin.
UXDM vous permet de créer un ou plusieurs objets transformateurs et de les ajouter à la migration. Voir les exemples suivants de la façon d'utiliser les transformateurs pour manipuler vos données.
Cet exemple montre comment vous pouvez transformer les éléments de données existants pendant la migration.
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 ();Cette migration garantira que tous les champs de noms ont un cas cohérent.
Cet exemple montre comment vous pouvez ajouter de nouveaux éléments de données pendant la migration.
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 (); Cette migration ajoutera un nombre aléatoire dans un champ appelé random_number pour chaque ligne de données. Cela sera ensuite migré vers la base de données de destination avec les autres champs.
Cet exemple montre comment les éléments de données peuvent être supprimés d'une ligne de données. Vous souhaiterez peut-être le faire si vous souhaitez utiliser sa valeur, mais ne pas le migrer réellement vers la destination.
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 (); Cette migration obtient les données du champ email dans la source, crée un nouvel élément de données email_hash qui contient un MD5 de l'adresse e-mail, puis supprime l'élément de données email d'origine. Ce nouveau email_hash sera ensuite migré vers la base de données de destination avec les autres champs, à l'exclusion du champ de email supprimé.