对于在日常的开发,我们用mysql,当线下分几个小组对一个网站进行开发的时候,在线下建立表,如何同步到线上就成了一个问题。
svn git等版本控制系统,可以控制文件的版本,yii2通过migrate,来进行sql文件的上传,以及执行。
migrate的使用:
1.首先创建migrate文件,语法很简单:
./yii migrate/create test_user
执行后,就会在/console/migrations/下面生成m160511_080937_test_user.php。
下面是执行log
[root@services datacenter_1000]# ./yii migrate/create test_user Yii Migration Tool (based on Yii v2.0.7) Create new migration '/www/web/datacenter/datacenter_1000/console/migrations/m160511_080937_test_user.php'? (yes|no) [no]:yes New migration created successfully.
默认的路径是在console/migrations下面。
如果执行 ./yii migrate 就会执行console/migrations 下面的sql,当然,在执行前,需要到表migration 中查看信息,然后在决定执行那些sql,执行的是文件中的up()方法里面的sql,如果是事务操作,则不适用up(),而使用safeUp()方法。
有时候我们有自己的扩展,然后把migration放到自己的扩展里面,可以通过加入参数–migrationPath=@yii/log/migrations
来创建,执行相应的数据库脚本、
./yii migrate --migrationPath=@yii/log/migrations/
同样 down() , 采用 safeDown()方法。
如下是所有这些数据库访问方法的列表: yii\db\Migration::execute(): 执行一条 SQL 语句 yii\db\Migration::insert(): 插入单行数据 yii\db\Migration::batchInsert(): 插入多行数据 yii\db\Migration::update(): 更新数据 yii\db\Migration::delete(): 删除数据 yii\db\Migration::createTable(): 创建表 yii\db\Migration::renameTable(): 重命名表名 yii\db\Migration::dropTable(): 删除一张表 yii\db\Migration::truncateTable(): 清空表中的所有数据 yii\db\Migration::addColumn(): 加一个字段 yii\db\Migration::renameColumn(): 重命名字段名称 yii\db\Migration::dropColumn(): 删除一个字段 yii\db\Migration::alterColumn(): 修改字段 yii\db\Migration::addPrimaryKey(): 添加一个主键 yii\db\Migration::dropPrimaryKey(): 删除一个主键 yii\db\Migration::addForeignKey(): 添加一个外键 yii\db\Migration::dropForeignKey(): 删除一个外键 yii\db\Migration::createIndex(): 创建一个索引 yii\db\Migration::dropIndex(): 删除一个索引
有时,你可能只需要提交一个或者少数的几个迁移,你可以使用该命令指定需要执行的条数,而不是执行所有的可用迁移。例如,如下命令将会尝试提交前三个可用的迁移:
yii migrate 3
你也可以指定一个特定的迁移,按照如下格式使用 migrate/to
命令来指定数据库应该提交哪一个迁移:
yii migrate/to 150101_185401 # using timestamp to specify the migration 使用时间戳来指定迁移 yii migrate/to "2015-01-01 18:54:01" # using a string that can be parsed by strtotime() 使用一个可以被 strtotime() 解析的字符串 yii migrate/to m150101_185401_create_news_table # using full name 使用全名 yii migrate/to 1392853618 # using UNIX timestamp 使用 UNIX 时间戳
其他:来自于官网资料。
还原迁移
你可以使用如下命令来还原其中一个或多个意见被提交过的迁移:
yii migrate/down # revert the most recently applied migration 还原最近一次提交的迁移 yii migrate/down 3 # revert the most 3 recently applied migrations 还原最近三次提交的迁移
重做迁移
重做迁移的意思是先还原指定的迁移,然后再次提交。如下所示:
yii migrate/redo # redo the last applied migration 重做最近一次提交的迁移 yii migrate/redo 3 # redo the last 3 applied migrations 重做最近三次提交的迁移
列出迁移
你可以使用如下命令列出那些提交了的或者是还未提交的迁移:
yii migrate/history # 显示最近10次提交的迁移 yii migrate/history 5 # 显示最近5次提交的迁移 yii migrate/history all # 显示所有已经提交过的迁移 yii migrate/new # 显示前10个还未提交的迁移 yii migrate/new 5 # 显示前5个还未提交的迁移 yii migrate/new all # 显示所有还未提交的迁移
修改迁移历史
有时候你也许需要简单的标记一下你的数据库已经升级到一个特定的迁移,而不是实际提交或者是还原迁移。这个经常会发生在你手动的改变数据库的一个特定状态,而又不想相应的迁移被重复提交。那么你可以使用如下命令来达到目的:
yii migrate/mark 150101_185401 # 使用时间戳来指定迁移 yii migrate/mark "2015-01-01 18:54:01" # 使用一个可以被 strtotime() 解析的字符串 yii migrate/mark m150101_185401_create_news_table # 使用全名 yii migrate/mark 1392853618 # 使用 UNIX 时间戳