之前创建项目的时候使用了artisan指令直接生成了数据库的Migrations.

但是随着项目模块的逐渐增加,出现了需要增加字段的情况,在结合手册折腾了大概一小时之后,终于把现在遇到的问题都整理出来了,也正好给自己留一个记录.

一.生成migration

通过手册可以看到,通过artisan来直接生成非常的方便.

php artisan make:migration name [--option]  

其中name是migration文件的文件名,生成文件后会自动在输入的文件名前添加data('Y_m_d_Hms_') . name的形式.

如当天时间为2017年10月17日23:03:23,name为user的话,文件名即为2017_10_17_230323_user.

打开文件后,内容如下:

class User extends Migration
{/*** Run the migrations.** @return void*/public function up(){//}/*** Reverse the migrations.** @return void*/public function down(){//}
}

这里是第一个需要注意的地方,如果在创建migration时,name如果是user_aa_bb_cc的情况,生成文件中类文件名会变成Useraabbcc.

二.执行migrate

执行指令:

php artisan migrate

这时数据库中已经有你在类中up()方法里创建的一些字段内容了.

同时会生成一张名为migrations的表.其中的两个字段分别记录了migrate的文件名的批次(batch).

每migrate一次,新文件名的batch的值就会+1.

用来记录我们一共分批执行了多少次.

我们来模拟一下:

public function up(){//Schema::create('user', function (Blueprint $table) {$table->increments('id');$table->string('user_name', 30)->unique();$table->string('e_mail',50)->unique();$table->string('pass_word');$table->tinyInteger('access');});}

这时表中应该会有相应的字段了.

同样,我们还要在down()方法中填写一些内容:

因为这时第一次migrate,所以down()选择删除该表.

public function down(){//Schema::dropIfExists('user');}

个人观点:虽然这么做比较符合逻辑,但是这样会出现问题,如果rollback误操作多了一次操作或出现了step[=step]次数错误,直接摧毁了数据表,是十分危险的.

如果真的rollback到了最初的表状态,也可以通过手动删除表的方式,这样的话可控性会高一些.

三.执行添加新的migration

在项目中,经常会遇到表增加字段的情况,这时候就需要添加新的migration了.

这里是第二个注意点:

虽然每次通过make:migration指令创建的文件都会有时间前缀,但是这部分内容实际上是让Laravel判断时间顺序的,不会被写入类名.

同时,如果第二次make:migration创建文件时,name不能与之前的name相同,不然会类名冲突出现致命错误.

个人习惯是在文件后增加今天的日期,可能在后续的工作中还会有更规范的写法.

那么下面我们进行第二次make:migration,示例如下:

php artisan make:migration user_2017_10_17
class User20171017 extends Migration
{/*** Run the migrations.** @return void*/public function up(){//修改用户表的字段名称Schema::table('user', function (Blueprint $table) {$table->renameColumn('user_name', 'username');$table->renameColumn('e_mail', 'email');$table->renameColumn('pass_word', 'password');$table->timestamps();});}/*** Reverse the migrations.** @return void*/public function down(){//退回上次修改Schema::table('user', function (Blueprint $table) {$table->renameColumn('username', 'user_name');$table->renameColumn('email', 'e_mail');$table->renameColumn('password', 'pass_word');$table->dropTimestamps();});}
}

这里我修改了一些字段的名称,增加了时间字段.

在down()方法中,按照相反的方式添加相应的方法即可.

四.migrate:rollback

就如开始所说,我们有的时候在migrate过程中出现了一些小错误,需要执行migrate:rollback指令:

php artisan migrate:rollback --step[=step]

其中可选参数step为rollback的步数.

这时,系统会根据之前migrations表中的batch字段,逐次的进行rollback,每执行一次rollback,就相当于是回退到了上一次migrate的地方.

这就是我整个实现migrations过程,其中大部分程手册中都有,我只是把我觉得比较重要的部分记录了下来.

同时我在整个过程中遇到的问题主要是第二次执行make:migrations时,与之前的文件名字重复,导致出现了重名类.

后来通过上面需要注意的点解决了这个问题.

本人刚刚接触这些东西也没多久,如果有错误的地方,还希望提出宝贵意见.

今天就先到这里,谢谢!

遇见Laravel Migrations的migrate与rollback相关推荐

  1. laravel migrations 反向生成

    安装 推荐的安装方式是通过composer: 作曲家需要–dev " kitloong / laravel-migrations-generator " Laravel安装 Lar ...

  2. Laravel 5.4 migrate时报错: Specified key was too long error

    Laravel 5.4默认使用utf8mb4字符编码,而不是之前的utf8编码.因此运行php artisan migrate 会出现如下错误: [Illuminate\Database\QueryE ...

  3. php artisan migrate,laravel php artisan migrate错误

    错误 运行php artisan migrate出现如下错误: In Connection.php line 664: SQLSTATE[42000]: Syntax error or access ...

  4. php artisan migrate:make,laravel – php artisan migrate:make create_mytable失败:“migrate:make”未定义...

    语法已更改为php artisan make:migration. 这里是可用的make命令. make:auth Create auth classes for the application ma ...

  5. Laravel 实践之路: 数据库迁移与数据填充

    数据库迁移实际上就是对数据库库表的结构变化做版本控制,之前对数据库库表结构做修改的方式比较原始,比如说对某张库表新增了一个字段,都是直接在库表中执行alter table xxx add .. 的方式 ...

  6. laravel artisan

    PS.需要CD到项目的目录下执行 artisan命令 查看所有可以用的Artisan命令 php artisan php artisanlist Laravel Framework 5.4.36 Us ...

  7. lumen php命令,laravel/lumen —— Artisan Console 命令行

    1. 简介 laravel和lumen提供了artisan命令行接口,以便我们来进行命令行操作. 我们可以通过php artisan list来查看框架为我们提供了哪些接口. root@chen-Ub ...

  8. laravel api_如何在现有的Laravel应用中获取即时GraphQL API

    laravel api by Karthikeya Viswanath 通过Karthikeya Viswanath 如何在现有的Laravel应用中获取即时GraphQL API (How to g ...

  9. php think migrate,thinkphp5 migrate数据库迁移使用详解

    这次给大家带来thinkphp5 migrate数据库迁移使用详解,thinkphp5 migrate数据库迁移使用的注意事项有哪些,下面就是实战案例,一起来看一下. tp5相对与tp3.2有很大的不 ...

最新文章

  1. 2021年,作为算法工程师的你们会在CV业务落地上用Transformer吗?
  2. 32位汇编语言helloworld_梦开始的地方——Hello World!
  3. 全面剖析Redis Cluster原理和应用 (good)
  4. C语言中,宏和全局变量的区别是什么?
  5. rabbit和mysql事务_分布式事务原理及SpringBoot整合RabbitMQ实现可靠事件,TCC事务模型及接口幂等性...
  6. 我喜欢用计算机400字,我的电脑400字作文
  7. 中九天线调节经验总结
  8. 双向箭头轮播图html,swiper轮播图配合nextTick的使用
  9. ASP.NET 页面双向静态化
  10. 【MATLAB】修改黑色炫酷主题darcula.prf
  11. gre 填空64-77
  12. 小谈国内桌面浏览器占有率
  13. 智能家庭本周锋闻:小米终于还是做了空气净化器
  14. Windows中的SysWow64文件夹
  15. C#中的Obsolete特性
  16. Django-(6)
  17. 元宇宙之经济(01)理解区块链
  18. 炫龙笔记本怎么进bios设置u盘启动图文教程
  19. 基于BP神经网络进行手写体识别(Matlab代码实现)
  20. 每天干的啥?(2019.6)

热门文章

  1. His系统简介、医院信息系统(Hospital Information System
  2. 你知道域名劫持的重要性吗? 教你防范网站被域名劫持
  3. 动态网站基本上都是有后台的,静态的网站就是纯HTML的网站的,这样的网站是没有后台的
  4. 阿里云HaaS100物联网开发板学习笔记(六)做个智能灯---一个完整的开发例子
  5. python 选座位助手
  6. lsdyna批处理求解工具使用
  7. 卷积神经网络以及经典网络模型的浅谈
  8. ES6 计算属性名快速上手
  9. php语言进销存单位换算,单位换算工具(在线换算单位器)
  10. bash管道符开启子进程