UXDM可幫助開發人員將數據從一個系統或格式遷移到另一個系統。

可以使用作曲家輕鬆安裝UXDM。只需從項目的根部運行以下命令即可。
composer require divineomega/uxdm
如果您以前從未使用過Composer Dependency Manager,請前往Commater網站,以獲取有關如何開始的更多信息。
創建一個新的PHP文件以包含您的UXDM遷移代碼。在此示例中,我們將其稱為user-csv-import.php 。請記住要添加require 'vendor/autoload.php'和相關use語句(如有必要)。
創建您的源和目標對象。此示例使用CSV源和PDO(數據庫)目標。
$ 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 ,並獲得一個不錯的進度欄。有關可用來源和目標對像以及更高級用法的更多信息,請參見下面的部分。
每個UXDM遷移都需要一個源對象和至少一個目標對象。這些決定了讀取和編寫數據的位置和方式。 UXDM軟件包可與各種來源和目標對像一起使用,包括以下內容。
其中一些內置在核心UXDM軟件包中,而另一些則是單獨的軟件包。
源和目標對象可用於任何組合。數據可以從CSV遷移並插入數據庫,就像可以將數據從數據庫遷移到CSV一樣容易。
您還可以在同一遷移中使用類似的源和目標對象。例如,UXDM的常見用途是使用PDO源和PDO目的地將數據從一個數據庫傳輸到另一個數據庫。
請參閱“來源和目的地”頁面,以獲取更多資源和目的地,以及有關其使用情況的詳細文檔。
數據庫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 ();此遷移將將id , email和name字段從old-test數據庫中的users表移動到new-test數據庫中的new_users表,從而替換了使用相同id (密鑰字段)的任何現有記錄。
您可以使用UXDM驗證源數據。如果驗證通過遷移而失敗,則遷移將停止,並將拋棄ValidationException 。但是,如果調用->validateBeforeMigrating() ,則將在遷移開始之前先驗證所有數據行。
下面的代碼顯示瞭如何驗證各個字段。
$ 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 ();此遷移將驗證源數據與定義的驗證規則匹配。
UXDM使用Omega驗證器軟件包。有關所有可用驗證規則,請參見其文檔。
此示例顯示了UXDM如何從源到目標映射字段名稱。
$ migrator = new Migrator ;
$ migrator -> setSource ( $ pdoSource )
-> setDestination ( $ pdoDestination )
-> setFieldsToMigrate ([ ' id ' , ' email ' , ' name ' ])
-> setKeyFields ([ ' id ' ])
-> setFieldMap ([ ' name ' => ' full_name ' ])
-> withProgressBar ()
-> migrate ();此遷移將將數據從源name字段移動到目標full_name字段,同時仍正常移動id和email字段。
有時,您想要從源到目的地需求轉換的數據。這可能是在更改現有的數據項目,添加新數據項或刪除您不需要的項目。
UXDM允許您創建一個或多個變壓器對象,並將它們添加到遷移中。請參閱以下示例,示例如何使用變壓器來操縱您的數據。
此示例顯示瞭如何在遷移過程中轉換現有數據項。
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 ();此遷移將確保所有名稱字段都具有一致的情況。
此示例顯示了在遷移發生時如何添加新數據項。
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 ();此遷移將為每一行數據添加一個隨機數,稱為random_number的字段。然後,這將與其他字段一起遷移到目標數據庫。
此示例演示瞭如何從數據行中刪除數據項。如果您想使用其值,但實際上不將其遷移到目的地,您可能希望這樣做。
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 ();此遷移從源中的email字段中獲取數據,創建一個新的email_hash數據項,其中包含電子郵件地址的MD5,然後刪除原始的email數據項。然後,此新的email_hash將與其他字段一起遷移到目標數據庫,不包括已刪除的email字段。