UXDM hilft Entwicklern, Daten von einem System oder Format zum anderen zu migrieren.

UXDM kann einfach mit Composer installiert werden. Führen Sie einfach den folgenden Befehl aus der Wurzel Ihres Projekts aus.
composer require divineomega/uxdm
Wenn Sie den Komponisten -Abhängigkeitsmanager noch nie verwendet haben, besuchen Sie die Komponist -Website, um weitere Informationen zum Einstieg zu erhalten.
Erstellen Sie eine neue PHP -Datei, um Ihren UXDM -Migrationscode zu enthalten. In diesem Beispiel nennen wir es user-csv-import.php . Denken Sie require 'vendor/autoload.php' und relevante use hinzuzufügen.
Erstellen Sie Ihre Quell- und Zielobjekte. In diesem Beispiel wird ein CSV -Quell- und PDO -Ziel (Datenbank) verwendet.
$ 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 aus der Befehlszeile ausführen und erhalten eine schöne Fortschrittsleiste.Weitere Informationen zu den verfügbaren Quell- und Zielobjekten sowie weiteren Beispielen finden Sie in den folgenden Abschnitten.
Jede UXDM -Migration benötigt ein Quellobjekt und mindestens ein Zielobjekt. Diese bestimmen, wo und wie Daten gelesen und geschrieben werden. Das UXDM -Paket funktioniert mit einer Vielzahl von Quell- und Zielobjekten, einschließlich der folgenden.
Einige davon sind in das Kern-UXDM-Paket integriert, andere sind als separate Pakete erhältlich.
Quell- und Zielobjekte können in jeder Kombination verwendet werden. Daten können von einem CSV migriert und in eine Datenbank eingefügt werden, genauso einfach wie Daten von einer Datenbank in einen CSV migriert werden können.
Sie können auch ähnliche Quell- und Zielobjekte in derselben Migration verwenden. Beispielsweise besteht eine häufige Verwendung von UXDM darin, eine PDO -Quelle und ein PDO -Ziel zu verwenden, um Daten von einer Datenbank auf eine andere zu übertragen.
Weitere Quellen und Ziele finden Sie in der Seite "Quellen & Ziele" sowie detaillierte Dokumentation zu ihrer Verwendung.
Ein Beispiel für eine grundlegende Datenbank zur Datenbank -UXDM -Migration ist unten angezeigt.
$ 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 (); Diese Migration verschiebt die id , email und name aus der users in der old-test in die Tabelle new_users in der new-test Datenbank, wobei vorhandene Datensätze durch die gleiche id (das Schlüsselfeld) ersetzt werden.
Sie können UXDM verwenden, um die Quelldaten zu validieren. Wenn die Validierung den Teil durch eine Migration fehlschlägt, wird die Migration angehalten und eine ValidationException wird geworfen. Wenn jedoch ->validateBeforeMigrating() aufgerufen wird, werden alle Datenzeilen vor Beginn der Migration präventiv validiert.
Der folgende Code zeigt, wie Sie verschiedene Felder validieren können.
$ 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 ();Diese Migration validieren die Quelldaten entsprechen den definierten Validierungsregeln.
UXDM verwendet das Omega Validator -Paket. Seine Dokumentation für alle verfügbaren Validierungsregeln.
Dieses Beispiel zeigt, wie UXDM Feldnamen von Quelle zu Ziel zuordnen kann.
$ migrator = new Migrator ;
$ migrator -> setSource ( $ pdoSource )
-> setDestination ( $ pdoDestination )
-> setFieldsToMigrate ([ ' id ' , ' email ' , ' name ' ])
-> setKeyFields ([ ' id ' ])
-> setFieldMap ([ ' name ' => ' full_name ' ])
-> withProgressBar ()
-> migrate (); Diese Migration verschiebt Daten aus dem Feld name in das Feld Ziel full_name , während die id und email -Felder normal verschoben werden.
Manchmal müssen die Daten, die Sie von Quelle zum Ziel übertragen möchten, verändert. Dies kann bestehende Datenelemente, das Hinzufügen neuer Datenelemente oder das Entfernen von Elementen, die Sie nicht benötigen, ändern.
Mit UXDM können Sie ein oder mehrere Transformatorobjekte erstellen und der Migration hinzufügen. Sehen Sie die folgenden Beispiele für die Verwendung von Transformatoren zur Manipulation Ihrer Daten.
Dieses Beispiel zeigt, wie Sie vorhandene Datenelemente während der Migration transformieren können.
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 ();Diese Migration stellt sicher, dass alle Namen Felder einen konsistenten Fall haben.
Dieses Beispiel zeigt, wie Sie während der Migration neue Datenelemente hinzufügen können.
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 (); Diese Migration fügt für jede Datenzeile eine zufällige Zahl in ein Feld namens random_number hinzu. Dies wird dann zusammen mit den anderen Feldern in die Zieldatenbank migriert.
Dieses Beispiel zeigt, wie Datenelemente aus einer Datenzeile entfernt werden können. Möglicherweise möchten Sie dies tun, wenn Sie seinen Wert verwenden möchten, aber nicht tatsächlich in das Ziel migrieren möchten.
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 (); Diese Migration erhält die Daten aus dem email -Feld in der Quelle, erstellt ein neues email_hash -Datenelement, das einen MD5 der E -Mail -Adresse enthält und dann das ursprüngliche email -Datenelement entfernt. Dieser neue email_hash wird dann zusammen mit den anderen Feldern in die Zieldatenbank migriert, ausgenommen das email entfernt.