malukenho / migratedb
该软件包最新版本(v0.1.0)没有提供许可证信息。
用于在关系型数据库之间迁移数据的简单工具
v0.1.0
2013-12-30 14:45 UTC
Requires
- php: >=5.3.0
- herrera-io/annotations: *
This package is auto-updated.
Last update: 2024-09-20 23:49:07 UTC
README
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