框架版本: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. python re模块记录

    import re'''re模块 compile    match search findall    group groups 正则表达式常用格式: 字符:\d \w \t  . (\d:数字;\w ...

  2. 最少拦截系统 HDU - 1257

    某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于 ...

  3. gitlab 数据同步

    为了统一化管理,需要把老版本的 gitlab 仓库 同步到新的gitlab上. 1. 新建组, 新gitlab 建立的group 与 原gitlab相同.2.  新建project 3.  选择导入

  4. sonar6.7.6安装及汉化

    sonar下载地址 https://www.sonarqube.org/downloads/ 下载请选择 然后解压 在目录F:\tools\sonarqube-6.7.6\bin\windows-x8 ...

  5. Android 仿携程活动列表边框布局

    实现如下图所示的一个页面布局 布局框架 思路讲解: 1.一开始的思路是使用android提供的画布将布局中的内容花下来,之后想了想觉得比较麻烦,所以又开启了另外一条思路. 2.如上图“布局框架”所示. ...

  6. 学习CSS布局 - margin: auto;

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 浅析单点登录,以及不同二级域名下的SSO实现

    一家公司有多个产品线,就可能要有多个子域名,下头以baidu域名为例,a.baidu.com, b.baidu.com.com 是顶级域名,baidu 就是一个二级域名,a和b就是子域名. 当用户在a ...

  8. MFC入门(二)-- 提取输入框的字符串(定时关机的小程序)

    上篇文章已经让我们有了对于MFC最简单直观的认识,但貌似并无太大的交互性可言,而且其实也没有涉及到数据的交互,所以本文通过做一个时间可以调节的定时关机的Demo来演示. MFC入门(一)地址:http ...

  9. 通过重建清理SVN服务器无用目录,不丢失其他目录修改记录

    1.主要时有时间希望调整一些文件的目录结构,或者移除一个大量占用空间的文件节省服务器磁盘,但是又不希望调整后,对应的修改记录丢失.这时可以通过服务器目录重建实现. 2.重建后只是被排除掉的目录的修改记 ...

  10. CF293B Distinct Paths 搜索

    传送门 首先数据范围很假 当\(N + M - 1 > K\)的时候就无解 所以对于所有要计算的情况,\(N + M \leq 11\) 超级小是吧,考虑搜索 对于每一个格子试填一个数 对于任意 ...