marcinkozak / databasemigrator
数据库迁移工具。
Requires
- php: >=7.1
- ext-iconv: *
- illuminate/console: ^5.8|^6
- illuminate/database: ^5.8|^6
- illuminate/support: ^5.8|^6
This package is not auto-updated.
Last update: 2024-09-14 20:04:11 UTC
README
这是一个简单的控制台工具,它可以帮助您使用不同的数据库连接将数据从一种数据库迁移到另一种数据库。
功能
- 定义源数据库和目标数据库连接。
- 允许更改目标表名和列。
- 对每行数据进行数据转换。
何时使用
有时,您可能有机会根据现有数据库创建自己的数据库,但您认为可以更好地设计它,例如,主键不是简单地命名为 id
,而是使用 <table_name>_id
模式,或者列值不是您想要的。
安装
将 marcinkozak/databasemigrator
添加到 composer.json
。
"marcinkozak/databasemigrator": "dev-master"
或者简单运行
composer require marcinkozak/databasemigrator
为了使其对 Laravel 可用,打开 config/app.php
文件并添加以下行。
'providers' => array( // Other service providers entries MarcinKozak\DatabaseMigrator\DatabaseMigratorServiceProvider::class, );
配置
运行以下命令
php artisan vendor:publish --provider="MarcinKozak\DatabaseMigrator\DatabaseMigratorServiceProvider"
以在应用程序根目录中发布新文件
config/marcinkozak/databasemigrator/connections.php
database/schemas/ExampleSchema.php
第一个文件包含一组连接,其中每个连接定义了源和目标数据库连接、禁用/启用状态和模式类的名称。
<?php return [ [ 'source' => 'mysql2', 'target' => 'mysql', 'enabled' => true, 'schema' => ExampleSchema::class, ], ];
模式文件位于 database/schemas/
目录中。
在开始迁移之前,您必须已定义目标表,否则将抛出异常。
示例
迁移相同名称的表
$table = new Table('table_name');
迁移不同名称的表
$table = new Table('source_table_name', 'target_table_name');
定义列
这是使迁移对所选表起作用所必需的步骤。您可以定义单个列
$column = new Column('column_name'); $table->addColumn($column);
或不同名称的列
$column = new Column('source_column_name', 'target_column_name'); $table->addColumn($column);
或使用 schema()
方法在单个步骤中定义多列。
$table->schema([ 'column_1', 'column_2', //... ]);
当然,您可以在上述方法内部定义不同的名称。
$table->schema([ 'source_column_1' => 'target_column_1', 'source_column_2' => 'target_column_2', //... ]);
转换列值
我们并不总是希望将某些列的值迁移到相同的位置。该包支持 map()
方法,允许将值转换为新的值。要使用它,只需定义新的 Column
实例。
$column = new Column('column_name'); $column->map(function($value) { return $value . '_some_stupid_word'; });
如果您想创建在源表中设计得较差的关系,可以按照这种方式操作
$data = DB::table('some_table')->pluck('id', 'some_column_name'); $column = new Column('column_name'); $column->map(function($value) use($data) { return array_get($data, $value); });
假设在这种情况下,$value
存储与 some_column_name
列相同的值。通过使用 array_get
函数,我们可以获取所需的唯一键并将其用作 map
方法中新的外键。
运行迁移
该包有两个 Artisan 方法。
填充目标表
php artisan database-migrator:populate
清除目标表
php artisan database-migrator:clear