Awesome
MigrateDB
MigrateDB is a simple tool to migrate data between databases.
Step 1
Installing the MigrateDB is very simple using composer :3
Create the follow script composer.json
{
"require": {
"malukenho/migratedb": "dev-master"
}
}
Run composer install and all's okay!
Well, we have the follow table
mysql> SELECT * FROM user;
+------+------------+---------+
| id | name | passwd |
+------+------------+---------+
| 1 | Kika Pimpo | 123@456 |
| 2 | RamStrYou | 1!#@$%6 |
+------+------------+---------+
1 row in set (0.00 sec)
And would like to migrate this datas to another table.
mysql> SELECT * FROM member;
+-----------+-----------------+------------+
| user_id | user_name | user_pass |
+-----------+-----------------+------------+
| Nothing to see here |
+-----------+-----------------+------------+
1 row in set (0.00 sec)
Let's go!
Create the class to get data of a table. You can use the annotation @from_table to set it, and @complement to increase your query.
<?php
/**
* @Configurations(
* from_table="user",
* to_table="member",
* complement="WHERE status = '1'",
* type="select"
* )
*/
class User implements EnumTablesRelation
{
const user_id = 'id';
const user_name = 'name'
const user_pass = 'passwd';
}
The above code generates the following query
SELECT id, name, passwd FROM user WHERE status = 1
Step 2
Create the class to relation with previous class. It's gonna insert the data selected on Step 1 on this database
<?php
/**
* @Configurations(
* from_table="user",
* to_table="member"
* )
*/
class InsertUser implements EnumTablesRelation
{
const IDENTIFY = 'user_id';
const USERNAME = 'user_name'
const PASSWORD = 'user_pass';
}
Final Step
Create file of configuration and execute migration :3
<?php
$loader = require __DIR__.'/vendor/autoload.php';
$mySql = new PDO('...');
$mySql2 = new PDO('...');
$router = new MigrateDB(new User);
$result = $router->setConnection($mySql, $mySql2)
->MapperDatas('1');
$router->replyTo(new InsertUser)
->with($result);
You can also set it like this
<?php
$routerClient = new MigrateDB(new ClientData);
$routerClient->registerFilter(new ClientFilter)
->replyTo(new ClientDataReply)
->with(
$routerClient->setConnection(
$mySqlConnection,
$fireBirdConnection
)->MapperDatas(
rand(0, 9)
)
);
Advanced
Types
We use advanced structures for migrating information between the database, it is decided according to the annotation type
is the type definada in class EnumTablesRelation
. There are 3 types valid until now. They are:
- select
- join
- as
The select type has see on previous examples.
join
Here is a join
example:
<?php
/**
* @Configurations(
* from_table="UserList",
* to_table="NewUserList",
* complement="WHERE UserList.iduser = $1",
* type="join"
* )
*/
class UserRelation implements EnumTablesRelation
{
const user_id = 'userid';
const user_name = 'name.user_detail ON id = 1';
const user_pass = 'passwd';
}
The previous code generate the following query:
SELECT
`UserList`.`userid` AS user_id,
`UserList`.`passwd` AS user_pass,
`user_detail`.`name` AS user_name
FROM UserList
INNER JOIN
`user_detail` ON user_detail.id = 1
WHERE UserList.iduser = 1
as
Here is a as
example:
<?php
/**
* @Configurations(
* from_table="UserList",
* to_table="NewUserList",
* complement="WHERE iduser = $1",
* type="as"
* )
*/
class UserRelation implements EnumTablesRelation
{
const user_id = 'userid';
const user_name = 'name';
const user_pass = 'passwd';
}
The previous code generate the following query:
SELECT
`user_id` AS `userid`,
`user_name` AS `name`,
`user_pass` AS `passwd`
FROM UserList
WHERE iduser = 1