yii2中有数据迁移功能,这个功能在我们开发过程中有利于团队协作,对数据库表的增删改可以通过迁移功能来同步到团队其他人的数据库中
官方是这样介绍的
如下的步骤向我们展示了数据库迁移工具是如何为开发团队所使用的:
1:Tim 创建了一个新的迁移对象(例如,创建一张新表,改变字段的定义等)。
2:Tim 将这个新的迁移对象提交到代码管理系统(例如,Git,Mercurial)。
3:Doug 从代码管理系统当中更新版本并获取到这个新的迁移对象。
4:Doug 把这个迁移对象提交到本地的开发数据库当中, 这样一来,Doug 同步了 Tim 所做的修改
如下的步骤向我们展示了如何发布一个附带数据库迁移的新版本到生产环境当中:
Scott 为一个包含数据库迁移的项目版本创建了一个发布标签。
Scott 把发布标签的源代码更新到生产环境的服务器上。
Scott 把所有的增量数据库迁移提交到生产环境数据库当中
一:创建表
yii migrate/create create_user_tables //在console/migrations会生成一个 create_user_tables
修改这个文件 在safeup中创建表 有好多方法 可以通过内置create方法 但我喜欢原生 所以直接用原始sql来实现
//创建
public function safeUp() {
$this->execute("CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT '0' COMMENT '名称',PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
}
//回退
public function safeDown() {
$this->dropTable("{{user}}");
}
在命令行创建执行 yii mirgate
在命令行回退 yii migrate/down
二:修改字段删除字段
yii migrate/create add_field_user //在console/migrations会生成一个 add_field_user
修改该文件 safeup和down的方法
public function safeUp()
{
$this->addColumn("{{user}}", "age", $this->tinyInteger()->notNull()->comment("年龄"));
// or $this->execute("创建索引sql");
}
/**
* {@inheritdoc}
*/
public function safeDown()
{
$this->dropColumn("{{user}}", "age");
// or $this->execute("删除索引sql");
}
在命令行创建执行 yii mirgate
在命令行回退 yii migrate/down
三:已有表自动生成迁移文件
//配置db生成 mirgate
public function actionMirgatedata()
{
$model = \Yii::$app->db->createCommand("select table_name from information_schema.tables where table_schema='daidai' and table_type='base table'");
$posts = $model->queryAll();
echo "<pre>";
foreach ($posts as $key => $item) {
$sql = "show create table ".$item['table_name']." ";
$keys = \Yii::$app->db->createCommand($sql);
$keyposts = $keys->queryOne();
$num =(string)(52200+$key);
$str = './../../console/migrations/m200604_0'.$num.'_create_'.$item['table_name'].'.php';
$myfile = fopen($str, "w") or die("Unable to open file!");
$txt = "<?php
use yii\db\Migration;
class ".'m200604_0'.$num.'_create_'.$item['table_name']." extends Migration
{
public function safeUp()
{
".'$this->execute('."\"".$keyposts['Create Table']."\");
}
public function safeDown()
{
". '$this->dropTable('."'".$item['table_name']."');
}
}
";
fwrite($myfile, $txt);
fclose($myfile);
}
print_r('success');
}