使用YII框架的migrate迁移数据库

  框架版本: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、以上的内容纯为个人使用习惯,如果发现有错误或者不正确的使用方法,希望不吝指教,我一定及时更改。

 

posted @ 2018-02-05 17:42  寻觅beyond  阅读(905)  评论(0编辑  收藏  举报
返回顶部