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

使用YII框架的migrate迁移数据库的更多相关文章

  1. 关于Laravel 迁移数据库的问题

    今天在Homestead 中用 php artisan migrate 迁移数据库时出现了拒绝的情况: ***之后发现只要修改项目文件夹下面的database.php 和.env 文件中的数据库配置, ...

  2. LAMP+YII框架配置中遇到的问题

    以下列出了不同问题及答案: 1. 在yii框架中,改动数据库信息,主要有main.php和database.php两个文件. 2. 问题: watermark/2/text/aHR0cDovL2Jsb ...

  3. yii框架数据库操作数据访问对象(DAO)简单总结

    Yii提供了强大的数据库编程支持.Yii数据访问对象(DAO)建立在PHP的数据对象(PDO)extension上,使得在一个单一的统一的接口可以访问不同的数据库管理系统(DBMS).使用Yii的DA ...

  4. 全自动迁移数据库的实现 (Fluent NHibernate, Entity Framework Core)

    在开发涉及到数据库的程序时,常会遇到一开始设计的结构不能满足需求需要再添加新字段或新表的情况,这时就需要进行数据库迁移. 实现数据库迁移有很多种办法,从手动管理各个版本的ddl脚本,到实现自己的mig ...

  5. 使用 OAuth2-Server-php 在 Yii 框架上搭建 OAuth2 Server

    原文转自 http://www.cnblogs.com/ldms/p/4565547.html Yii 有很多 extension 可以使用,在查看了 Yii 官网上提供的与 OAuth 相关的扩展后 ...

  6. 使用Yii框架完整搭建网站流程入门

    下载地址: http://www.yiiframework.com/ http://www.yiichina.com/ 由美籍华人薛强研究而出, Yii 这个名字(读作易(Yee))代表 简单(eas ...

  7. 三级联动(在YII框架中)

    //三级联动 //数据库代码过多就不上传了 //视图 <div class="area">    <table class="table"&g ...

  8. Yii 框架学习--02 进阶

    应用结构 入口文件 文件位置: web/index.php <?php //开启debug,应用会保留更多日志信息,如果抛出异常,会显示详细的错误调用堆栈 defined('YII_DEBUG' ...

  9. Yii 框架学习--01 框架入门

    Yii 是一个高性能的,适用于开发 WEB2.0 应用的 PHP 框架. Yii目前有两个主要的版本: 2.0 和 1.1.本文以YII 2.0.7为例. 环境需求 Yii2.0 框架有一些系统上的需 ...

随机推荐

  1. WIN10刚开机任务管理显示CPU占用100%问题

    针对WIN10更新后出现的问题!!! 现象: 电脑刚开机,直接打开任务管理器,CPU占用100%! 但是电脑运行速度正常,按道理这时候应该卡死!(排除病毒) 下载鲁大师查看只是显示CPU 3%!而网上 ...

  2. 静态分析Android程序

    快速定位Android程序的关键代码 1.通过apktool反编译apk文件,得到AndroidManifest.xml文件,可以得到程序用到的组建.配置.以及主Activity 2.信息反馈法(特殊 ...

  3. android 通讯类资料整理

    https://github.com/koush/AndroidAsync(websocket) https://github.com/loopj/android-async-http http:// ...

  4. Android在代码中设置控件的drawableLeft,drawableRight,drawableTop,drawableBottom。

    根据业务的需要,要在代码中设置控件的drawableLeft,drawableRight,drawableTop,drawableBottom属性. 我们知道在xml中设置的方法为:android:d ...

  5. 由javascript的闭包引申到程序语言编译上的自由变量作用域的考量

    function foo() { var x = 10; return function bar() { console.log(x); }; } // "foo"返回的也是一个f ...

  6. (转)vim中多行注释

    1.多行注释:  1. 首先按esc进入命令行模式下,按下Ctrl + v,进入列(也叫区块)模式;  2. 在行首使用上下键选择需要注释的多行;  3. 按下键盘(大写)“I”键,进入插入模式:  ...

  7. 初步了解Owin

      OWIN英文全称是Open Web Interface for .NET. 仅从字面意思看OWIN是针对.net平台的开放web接口. 那Web接口是谁和谁之间的接口呢?是Web应用程序与Web服 ...

  8. SpringSecurity初步理解

    Authenticating a User with LDAP 首先创建一个简单的web控制器 package hello; import org.springframework.web.bind.a ...

  9. 从harbor部署到在k8s中使用

    一.概述 harbor是什么呢?英文单词的意思是:港湾.港湾用来存放集装箱(货物的),而docker的由来正是借鉴了集装箱的原理,所以harbor是用于存放docker的镜像,作为镜像仓库使用.官方的 ...

  10. Create-React-App 使用记录

    如果要修改 host 和 端口,需要在项目根目录添加 .env 文件,然后再文件中添加 HOST=dev.zhengtongauto.com PORT=3000 如果需要加上反向代理,需要处理接口跨域 ...