uxdm

2025-12-07 0 277

?通用扩展数据迁移器( uxdm

uxdm可帮助开发人员将数据从一个系统或格式迁移到另一个系统。

安装

可以使用作曲家轻松安装uxdm 。只需从项目的根部运行以下命令即可。

 composer require divineomega/ uxdm

如果您以前从未使用过Composer Dependency Manager,请前往Commater网站,以获取有关如何开始的更多信息。

快速开始

  1. 创建一个新的PHP文件以包含您的uxdm迁移代码。在此示例中,我们将其称为user-csv-import.php 。请记住要添加require 'vendor/autoload.php'和相关use语句(如有必要)。

  2. 创建您的源和目标对象。此示例使用CSV源和PDO(数据库)目标。

 $ csvSource = new CSVSource ( \' users.csv \' );

$ pdoDestination = new PDODestination ( new PDO ( \' mysql:dbname=test-database;host=127.0.0.1 \' , \' root \' , \' password \' ), \' users \' );
  1. 创建并配置新的uxdm迁移器对象。
 $ migrator = new Migrator ;
$ migrator -> setSource ( $ csvSource )
         -> setDestination ( $ pdoDestination )
         -> setFieldsToMigrate ([ \' id \' , \' email \' , \' name \' ])
         -> setKeyFields ([ \' id \' ])
         -> withProgressBar ()
         -> migrate ();
  1. 运行您新创建的迁移。在此示例中,我们可以从命令行中运行php user-csv-import.php ,并获得一个不错的进度栏。

有关可用来源和目标对象以及更高级用法的更多信息,请参见下面的部分。

迁移

每个uxdm迁移都需要一个源对象和至少一个目标对象。这些决定了读取和编写数据的位置和方式。 uxdm软件包可与各种来源和目标对象一起使用,包括以下内容。

  • PDO(PHP数据库对象)源和目标
  • 雄辩(在Laravel中使用)来源和目的地
  • 学说(在Symfony中使用)目的地
  • CSV(逗号分隔值)源和目的地
  • Excel源和目的地
  • 关联阵列源和目的地
  • JSON文件源和目的地
  • XML源和目的地
  • WordPress帖子源
  • WordPress用户源
  • 调试输出目的地

其中一些内置在核心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 ();

此迁移将将idemailname字段从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 ();

此迁移将验证源数据与定义的验证规则匹配。

  • “ ID”必须存在,数字。
  • 必须存在“电子邮件”,字符串和正确格式的电子邮件地址。
  • 必须存在“名称”和一个字符串。

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字段,同时仍正常移动idemail字段。

在迁移期间转换数据行

有时,您想要从源到目的地需求转换的数据。这可能是在更改现有的数据项目,添加新数据项或删除您不需要的项目。

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字段。

下载源码

通过命令行克隆项目:

git clone https://github.com/DivineOmega/uxdm.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 开发教程 uxdm https://www.zuozi.net/31845.html

常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务