框架版本:2.0.13
官网手册说明:http://www.yiichina.com/doc/guide/2.0/db-migrations
创建迁移
命令的格式: php yii migrate/create <name> 或者 ./yii migrate/create <name>
命令中的<name>只包含字母、数字和下划线,并且要和本次所做的迁移要密切相关,尽量做到从name就可以看出本次做迁移的变化。
下面是迁移示例
创建一个blog表 : php yii migrate/create create_blog
在blog表中增加comment字段 : php yii migrate/create add_comment_to_blog
在blog表中删除comment字段 : php yii migrate/create drop_comment_from_blog
执行命令后,Yii高级程序模板会在框架的根目录下的console/migrations/,而Yii的基本程序模板会在框架根目录的migrations/目录下生成一个文件,该文件的文件名为m<YYMMDD_HHMMSS>_<Name>.php,根据<name>找到对应的文件进行编辑
修改迁移的操作
这里以创建一个Blog表为例:
首先在框架的根目录执行 php yii migrate/create create_Blog ,会生成文件m180209_031557_create_Blog.php。
编辑文件的up()方法或者safeup方法,编写想要做出的变化的代码;down()方法和safedown是为了撤销由up或者safeup()做出的改变。
修改文件的safeUp和safeDown方法的代码,如下:
public function safeUp() { db=Yii::db=Yii::app->db; $db->createCommand("create table Blog ( id int unsigned primary key);")->execute(); } public function safeDown() { db=Yii::db=Yii::app->db; $db->createCommand("drop table if exists Blog")->execute(); }
可以参照上面的格式,将要执行的SQL语句作为createCommand的参数。
执行迁移
执行up或者safeup,使用命令 php yii migrate/up;同理,执行down或者safeDown只需要使用命令php yii migrate/down。
执行命令后,会列出所有没有执行过的迁移,选择yes确认迁移,如果命令的选项是up,那么写在safeUp或者up中的代码就会执行;同理,如果命令中的选项是down,则safeDown或者down中的代码就会执行。
这里存在很多不规范的地方
1、比如添加的字段的类型应该使用抽象的类型,不应该指定是哪一种准确的类型,因为从MySQL到SQL Server或者到PostgreSQL时,字段的类型是存在差异的,为了迁移的兼容性,请使用抽象类型。
2、框架提供了很多SQL的操作接口,比如增加列(addColumn()),可以直接使用$this->addColumn();而且要注意的是,迁移文件中的这个$this是Yii::$app->db->createCommand(),所以不要使用$this->createCommand()这种写法,如果你要使用createCommand,请像上面例子中这么做。
3、文件名(也就是该类的名称,后面一部分表示该migration文件的目的,所以尽量通过文件名来表达准确的目的,尽管框架不会生成什么代码,但是,自己在迁移时才便于理解。
4、以上的内容纯为个人使用习惯,如果发现有错误或者不正确的使用方法,希望不吝指教,我一定及时更改。