oguzhankrcb / datamigrator
数据迁移的简单包
Requires
- php: ^8.0|^8.1|^8.2
- illuminate/contracts: ^8.0|^9.0|^10.0
- illuminate/database: ^8.0|^9.0|^10.0
- illuminate/support: ^8.0|^9.0|^10.0
- spatie/laravel-package-tools: ^1.14.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^6.4
- orchestra/testbench: ^7.21|^8.0
- phpunit/phpunit: ^9.6.1
This package is auto-updated.
Last update: 2024-09-09 02:26:13 UTC
README
数据迁移器
数据迁移器是一个PHP/Laravel包,可以帮助您将数据从一个模型迁移到另一个模型,即使它们的结构不同。这在您需要在不同数据库模式之间迁移数据时特别有用。
安装
您可以通过composer安装此包
composer require oguzhankrcb/datamigrator
用法
转换数据
要将数据从一种模型转换到另一种模型,请使用transformData
方法。此方法接受两个数组:$toModelPrototype
和$fromModel
。
$toModelPrototype
应该是一个数组,描述了新模型的结构,键是新字段的名称,值是从旧模型中基于新字段名称的字段。
$toModelPrototype = [ 'id' => '[id]', 'unique_id' => '[unique_number.id]', 'name' => '[data->name]', 'categories' => [ 'first_category' => '[data->categories->category_2]', 'second_category' => '[data->categories->category_3]', ], 'alias_with_item_code' => '[data->alias][data->item->code]', 'alias' => '[data->alias]', 'item_code' => '[data->item->code]', 'status' => '[data->status]', ];
$fromModel
应该是一个数组,表示旧模型的单行数据,键是旧模型字段名称,值是实际值。
$fromModel = [ 'id' => 1, 'unique_number' => 'lxAxmUlkfc', 'data' => [ 'name' => 'John Doe', 'alias' => 'JD', 'categories' => [ 'category_1' => 'Bronze', 'category_2' => 'Silver', 'category_3' => 'Gold', ], 'item' => [ 'code' => 196854, ], 'status' => true, ], ];
以下是使用transformData
的示例
use Oguzhankrcb\DataMigrator\Facades\DataMigrator; $newData = DataMigrator::transformData($toModelPrototype, $fromModel);
$newData
数组将包含转换后的数据,键是新字段的名称,值是旧模型中对应的值。
输出示例
[ 'id' => 1, 'unique_id' => 'lxAxmUlkfc1', 'name' => 'John Doe', 'categories' => [ 'first_category' => 'Silver', 'second_category' => 'Gold', ], 'alias_with_item_code' => 'JD196854', 'alias' => 'JD', 'item_code' => '196854', 'status' => true, ]
转移数据
要将所有数据从一个模型转移到另一个模型,请使用transferAllDataFromModelToModel
方法。此方法接受三个参数:$transferToModel
、$toModelPrototype
和$transferFromModel
。
$transferToModel
应该是您想要转移数据的模型的完全限定类名。
$transferToModel = \App\Models\User::class;
$toModelPrototype
应该是与transformData
一起使用的相同的数组。
$transferFromModel
应该是您想要从其转移数据的模型的完全限定类名。
$transferFromModel = \App\Models\LegacyUser::class;
以下是使用transferAllDataFromModelToModel
的示例
use App\Models\Order; use App\Models\Invoice; use Oguzhankrcb\DataMigrator\Facades\DataMigrator; // Define the fields to transfer from Order to Invoice $toModelPrototype = [ 'invoice_number' => '[order_number]', 'customer_name' => '[customer->name]', 'customer_email' => '[customer->email]', 'total_amount' => '[amount]', 'total_amount_with_currency' => '[amount]€', ]; // Transfer the data from Order to Invoice DataMigrator::transferAllDataFromModelToModel(Invoice::class, $toModelPrototype, Order::class);
在这个例子中,我们使用$toModelPrototype
数组定义了从Order
模型转移到Invoice
模型要转移的字段。然后我们调用transferAllDataFromModelToModel
方法,传递Invoice
和Order
模型以及$toModelPrototype
数组。
此方法将所有从Order
模型转移到Invoice
模型的数据,为数据库中的每个Order
模型创建一个新的Invoice
模型。
如果您只想将一个模型的数据转移到另一个模型,可以使用transferDataModelToModel
方法,与transferAllDataFromModelToModel
方法不同的是,此方法只转移一个模型,而不是所有模型。
以下是使用transferDataModelToModel
的示例
use App\Models\Order; use App\Models\Invoice; use Oguzhankrcb\DataMigrator\Facades\DataMigrator; // Define the fields to transfer from Order to Invoice $toModelPrototype = [ 'invoice_number' => '[order_number]', 'customer_name' => '[customer->name]', 'customer_email' => '[customer->email]', 'total_amount' => '[amount]', 'total_amount_with_currency' => '[amount]€', ]; $orderInstance = Order::find(1); // Transfer the data from Order to Invoice $transferedModel = DataMigrator::transferDataModelToModel(Invoice::class, $toModelPrototype, $orderInstance);
测试
composer test
更新日志
有关最近更改的更多信息,请参阅更新日志。
贡献
欢迎贡献!如果您发现任何错误或问题,请新建一个问题或提交一个拉取请求。
安全漏洞
请查阅我们的安全策略了解如何报告安全漏洞。
致谢
许可证
数据迁移器包是开源软件,根据MIT许可证授权。