Package Data | |
---|---|
Maintainer Username: | mkozak |
Maintainer Contact: | kontakt@marcinkozak.pl (Marcin Kozak) |
Package Create Date: | 2016-12-10 |
Package Last Update: | 2019-09-16 |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2024-12-25 15:03:34 |
Package Statistics | |
---|---|
Total Downloads: | 18 |
Monthly Downloads: | 0 |
Daily Downloads: | 0 |
Total Stars: | 1 |
Total Watchers: | 2 |
Total Forks: | 0 |
Total Open Issues: | 0 |
A simple console tool which helps to migrate database data from one to another using different DB connections.
Sometimes you can have an opportunity to make your custom database based on the existing one but in your opinion you can design it in better way for example primary keys are not names simply as id
but in the <table_name>_id pattern
, or columns values are not exactly what you want.
Add marcinkozak/databasemigrator
to composer.json
.
"marcinkozak/databasemigrator": "dev-master"
Or simply run:
composer require marcinkozak/databasemigrator
To make it available for Laravel open the config/app.php
file and add line below.
'providers' => array(
// Other service providers entries
MarcinKozak\DatabaseMigrator\DatabaseMigratorServiceProvider::class,
);
Run command
php artisan vendor:publish --provider="MarcinKozak\DatabaseMigrator\DatabaseMigratorServiceProvider"
to publish new files in an application root:
config/marcinkozak/databasemigrator/connections.php
database/schemas/ExampleSchema.php
The first file contains a collection of connections where each of them defines source and target DB connection, disabled/enabled state and class name of schema.
<?php
return [
[
'source' => 'mysql2',
'target' => 'mysql',
'enabled' => true,
'schema' => ExampleSchema::class,
],
];
The schema files are located in the database/schemas/
directory.
Before you start migrating you must have defined target tables, otherwise an exception will be thrown.
$table = new Table('table_name');
$table = new Table('source_table_name', 'target_table_name');
This is a mandatory step to make migration works for the selected table. You can define a single column
$column = new Column('column_name');
$table->addColumn($column);
or for different names
$column = new Column('source_column_name', 'target_column_name');
$table->addColumn($column);
or use the schema()
method to define multi columns in single step.
$table->schema([
'column_1',
'column_2',
//...
]);
Of course you are able to define different names inside the above method.
$table->schema([
'source_column_1' => 'target_column_1',
'source_column_2' => 'target_column_2',
//...
]);
Not always we want to migrate the same value for certain column. The package supports the map()
method which allows to transform value to the new one. To use it simply define new Column
instance.
$column = new Column('column_name');
$column->map(function($value) {
return $value . '_some_stupid_word';
});
If you want to make some relation which has poorly designed in the source table you can follow that way
$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);
});
Let's suppose that in this case $value
stores identical value as the some_column_name
column. By using the array_get
function we can fetch the desirable primary key and use it as foreign key for the new value inside the map
method.
The package has two Artisan methods.
php artisan database-migrator:populate
php artisan database-migrator:clear
~~1. While developing this package I have had a task about doing migration DB data from MS SQL server to the MySQL. The source database contains polish chars so I have stuck due wrong characters conversions between databases. Till today I do not know how to solve that.~~