UXDM 帮助开发者将数据从一个系统或格式迁移到另一个。

v1.23.0 2018-04-16 10:35 UTC

README

Build Status Coverage Status StyleCI Packagist

UXDM 帮助开发者将数据从一个系统或格式迁移到另一个。

安装

UXDM 可以通过 Composer 轻松安装。只需从您项目的根目录运行以下命令。

composer require rapidwebltd/uxdm

如果您以前从未使用过 Composer 依赖项管理器,请访问 Composer 网站 了解如何开始。

迁移

每个 UXDM 迁移都需要一个源对象和至少一个目标对象。这些对象确定了数据读取和写入的位置和方式。UXDM 包包含多种源和目标对象,包括以下内容。

  • PDO (PHP 数据库对象) 源 & 目标
  • CSV (逗号分隔值) 源 & 目标
  • 关联数组源 & 目标
  • JSON 文件源 & 目标
  • XML 源 & 目标
  • WordPress 文章源
  • WordPress 用户源
  • 调试输出目标

源和目标对象可以任意组合使用。数据可以从 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'])
         ->migrate();

此迁移将把 idemailname 字段从 old-test 数据库中的 users 表移动到 new-test 数据库中的 new_users 表,用相同的 id(键字段)替换任何现有记录。

映射源到目标字段名称

此示例展示了 UXDM 如何映射源到目标字段名称。

$migrator = new Migrator;
$migrator->setSource($pdoSource)
         ->setDestination($pdoDestination)
         ->setFieldsToMigrate(['id', 'email', 'name'])
         ->setKeyFields(['id'])
         ->setFieldMap(['name' => 'full_name'])
         ->migrate();

此迁移将把源 name 字段的数据移动到目标 full_name 字段,同时正常移动 idemail 字段。

在迁移过程中修改数据项

以下示例展示了如何使用 UXDM 在迁移过程中修改数据项。

$migrator = new Migrator;
$migrator->setSource($pdoSource)
         ->setDestination($pdoDestination)
         ->setFieldsToMigrate(['id', 'email', 'name'])
         ->setKeyFields(['id'])
         ->setDataItemManipulator(function($dataItem) {
            if ($dataItem->fieldName=='name') {
                $dataItem->value = strtoupper($dataItem->value);
            }
         })
         ->migrate();

此迁移将在两个数据库之间移动用户数据。但是,它还将把 name 字段中的值转换为大写。

在迁移过程中修改数据行

添加数据项

此示例展示了 UXDM 如何在迁移过程中修改每一行数据。

$migrator = new Migrator;
$migrator->setSource($pdoSource)
         ->setDestination($pdoDestination)
         ->setFieldsToMigrate(['id', 'email', 'name'])
         ->setKeyFields(['id'])
         ->setDataRowManipulator(function($dataRow) {
            $dataRow->addDataItem(new DataItem('random_number', rand(1,1000)));
         })
         ->migrate();

此迁移将为每一行数据添加一个随机数到 random_number 字段,然后将其与其他字段一起迁移到目标数据库。

删除数据项

此示例演示了如何从数据行中删除数据项。如果您想使用其值但不实际将其迁移到目标,可能会这样做。

$migrator = new Migrator;
$migrator->setSource($pdoSource)
         ->setDestination($pdoDestination)
         ->setFieldsToMigrate(['id', 'email', 'name'])
         ->setKeyFields(['id'])
         ->setDataRowManipulator(function($dataRow) {
            $emailDataItem = $dataRow->getDataItemByFieldName('email');
            $dataRow->addDataItem(new DataItem('email_hash', md5($emailDataItem->value)));
            $dataRow->removeDataItem($emailDataItem);
         })
         ->migrate();

此迁移操作从源数据中的email字段获取数据,创建一个新的email_hash数据项,该数据项包含电子邮件地址的md5散列,然后删除原始的email数据项。这个新的email_hash将与其他字段一起迁移到目标数据库,但不包括被删除的email字段。