zoukankan      html  css  js  c++  java
  • 使用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、以上的内容纯为个人使用习惯,如果发现有错误或者不正确的使用方法,希望不吝指教,我一定及时更改。

  • 相关阅读:
    Daliy Algorithm (dp,模拟)-- day 80
    Daliy Algorithm (dp,堆)-- day 79
    Mybatis一级缓存和二级缓存 Redis缓存
    简单排序
    java一个大接口拆用多线程方式拆分成多个小接口
    集群环境下Shiro Session的管理
    递归和快速排序
    分布式定时任务
    Redis集群架构
    IO流
  • 原文地址:https://www.cnblogs.com/-beyond/p/8418667.html
Copyright © 2011-2022 走看看