框架版本: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. Handler基本运行机制

    Handler,Looper,MessageQueue的基本原理(三个组成一个消息处理机制)最大的作用就是实现线程间的通信 Handler负责把消息对象加入到消息队列当中 Looper(循环器)是一个 ...

  2. Android中消息系统模型和Handler Looper

    http://www.cnblogs.com/bastard/archive/2012/06/08/2541944.html Android中消息系统模型和Handler Looper 作为Andro ...

  3. 常用类(Date,Calendar,Math,枚举)

    1.日期时间类 计算机时间戳是指距离历元(1970-01-01 00:00:00:000)的时间间隔(以毫秒ms为单位). 如:计算机时间2019-04-29 14:14:00是该时间距离历元经过的毫 ...

  4. ucml 子业务组件与行为参与者业务组件

  5. pyspider安装完启动报错【connect to scheduler rpc error: error(111, 'Connection refused')】

    调研爬虫框架pyspider有一段时间了,感觉已经比较成熟,跟老板申请了一台机器,打算搭一套正式环境.然而在熟悉的安装步骤过后,启动画面却是这样的: 虽然心中有疑惑,但还是熟练的百度起来.一番搜索之后 ...

  6. Mybatis学习总结(二)——Mapper代理开发

    一.概要 1.原始DAO开发中存在的问题:(1)DAO实现方法体中存在很多过程性代码.(2)调用SqlSession的方法(select/insert/update)需要指定Statement的id, ...

  7. java 变量及数据类型、原码、反码、补码

    Java基础——变量及数据类型 变量的概念 内存中的一个存储区域 变量名+数据类型 可在同一类型范围内不断变化 为什么定义变量: 用于不断的存放同一类型的常量,并可以重复使用 使用变量注意: 变量的作 ...

  8. UOJ219 NOI2016 优秀的拆分 二分、字符串哈希

    传送门 题目可以转化为求\(AA\)的数量,设\(cnt1_x\)表示左端点为\(x\)的\(AA\)的数量,\(cnt2_x\)表示右端点为\(x\)的\(AA\)的数量,那么答案就是\(\sum ...

  9. Vue-认识状态管理vuex

    vuex是一个专门为vue.js设计的状态管理模式,并且也可以使用devtools进行调试,可以多个组件共享状态.简单来说,就是共享的状态用state来存放,用mutations来操作state,但是 ...

  10. 使用Python遇到:'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte 问题

    查看你的HTTP头部是否有如下头部信息:"Accept-Encoding": "gzip, deflate" 这条信息代表本地可以接收压缩格式的数据,而服务器在 ...