oguzhankrcb/datamigrator

数据迁移的简单包

1.0.1 2023-03-01 17:12 UTC

README

数据迁移器

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

数据迁移器是一个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方法,传递InvoiceOrder模型以及$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许可证授权。