malukenho/migratedb

该软件包最新版本(v0.1.0)没有提供许可证信息。

用于在关系型数据库之间迁移数据的简单工具

v0.1.0 2013-12-30 14:45 UTC

This package is auto-updated.

Last update: 2024-09-20 23:49:07 UTC


README

Build Status Latest Stable Version Total Downloads Latest Unstable Version License

MigrateDB

MigrateDB 是一个在数据库之间迁移数据的简单工具。

步骤 1

使用 composer 安装 MigrateDB 非常简单 :3

创建以下 composer.json 脚本

{
    "require": {
        "malukenho/migratedb": "dev-master"
    }
}

运行 composer install,一切就绪!

嗯,我们有以下表

mysql> SELECT * FROM user;
+------+------------+---------+
| id   | name       | passwd  |
+------+------------+---------+
|    1 | Kika Pimpo | 123@456 |
|    2 | RamStrYou  | 1!#@$%6 |
+------+------------+---------+
1 row in set (0.00 sec)

并希望将这些数据迁移到另一个表中。

mysql> SELECT * FROM member;
+-----------+-----------------+------------+
| user_id   | user_name       | user_pass  |
+-----------+-----------------+------------+
|           Nothing to see here            |
+-----------+-----------------+------------+
1 row in set (0.00 sec)

让我们开始吧!

创建一个获取表数据的类。您可以使用注解 @from_table 来设置它,并使用 @complement 来扩展您的查询。

<?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';
}

上述代码生成以下查询

SELECT id, name, passwd FROM user WHERE status = 1

步骤 2

创建一个与上一个类关联的类。它将在 步骤 1 中选择的数据插入到这个数据库中

<?php
/**
 * @Configurations(
 *     from_table="user",
 *     to_table="member"
 * )
 */
class InsertUser implements EnumTablesRelation
{
	const IDENTIFY = 'user_id';
	const USERNAME = 'user_name'
	const PASSWORD = 'user_pass';
}

最终步骤

创建配置文件并执行迁移 :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);

您也可以这样设置

<?php
$routerClient = new MigrateDB(new ClientData);

$routerClient->registerFilter(new ClientFilter)
    ->replyTo(new ClientDataReply)
    ->with(
        $routerClient->setConnection(
            $mySqlConnection, 
            $fireBirdConnection
        )->MapperDatas(
            rand(0, 9)
        )
    );

高级

类型

我们使用高级结构在数据库之间迁移信息,这是根据注解 type 在类 EnumTablesRelation 中定义的类型决定的。目前有 3 种有效类型。它们是

  • select
  • join
  • as

select 类型在前面的示例中已经看到。

join

以下是一个 join 示例

<?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';
}

上述代码生成以下查询

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

以下是一个 as 示例

<?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';
}

上述代码生成以下查询

SELECT 
    `user_id` AS `userid`, 
    `user_name` AS `name`, 
    `user_pass` AS `passwd` 
         FROM UserList 
WHERE iduser = 1