遇见Laravel Migrations的migrate与rollback
之前创建项目的时候使用了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相关推荐
- laravel migrations 反向生成
安装 推荐的安装方式是通过composer: 作曲家需要–dev " kitloong / laravel-migrations-generator " Laravel安装 Lar ...
- Laravel 5.4 migrate时报错: Specified key was too long error
Laravel 5.4默认使用utf8mb4字符编码,而不是之前的utf8编码.因此运行php artisan migrate 会出现如下错误: [Illuminate\Database\QueryE ...
- php artisan migrate,laravel php artisan migrate错误
错误 运行php artisan migrate出现如下错误: In Connection.php line 664: SQLSTATE[42000]: Syntax error or access ...
- 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 ...
- Laravel 实践之路: 数据库迁移与数据填充
数据库迁移实际上就是对数据库库表的结构变化做版本控制,之前对数据库库表结构做修改的方式比较原始,比如说对某张库表新增了一个字段,都是直接在库表中执行alter table xxx add .. 的方式 ...
- laravel artisan
PS.需要CD到项目的目录下执行 artisan命令 查看所有可以用的Artisan命令 php artisan php artisanlist Laravel Framework 5.4.36 Us ...
- lumen php命令,laravel/lumen —— Artisan Console 命令行
1. 简介 laravel和lumen提供了artisan命令行接口,以便我们来进行命令行操作. 我们可以通过php artisan list来查看框架为我们提供了哪些接口. root@chen-Ub ...
- laravel api_如何在现有的Laravel应用中获取即时GraphQL API
laravel api by Karthikeya Viswanath 通过Karthikeya Viswanath 如何在现有的Laravel应用中获取即时GraphQL API (How to g ...
- php think migrate,thinkphp5 migrate数据库迁移使用详解
这次给大家带来thinkphp5 migrate数据库迁移使用详解,thinkphp5 migrate数据库迁移使用的注意事项有哪些,下面就是实战案例,一起来看一下. tp5相对与tp3.2有很大的不 ...
最新文章
- 2021年,作为算法工程师的你们会在CV业务落地上用Transformer吗?
- 32位汇编语言helloworld_梦开始的地方——Hello World!
- 全面剖析Redis Cluster原理和应用 (good)
- C语言中,宏和全局变量的区别是什么?
- rabbit和mysql事务_分布式事务原理及SpringBoot整合RabbitMQ实现可靠事件,TCC事务模型及接口幂等性...
- 我喜欢用计算机400字,我的电脑400字作文
- 中九天线调节经验总结
- 双向箭头轮播图html,swiper轮播图配合nextTick的使用
- ASP.NET 页面双向静态化
- 【MATLAB】修改黑色炫酷主题darcula.prf
- gre 填空64-77
- 小谈国内桌面浏览器占有率
- 智能家庭本周锋闻:小米终于还是做了空气净化器
- Windows中的SysWow64文件夹
- C#中的Obsolete特性
- Django-(6)
- 元宇宙之经济(01)理解区块链
- 炫龙笔记本怎么进bios设置u盘启动图文教程
- 基于BP神经网络进行手写体识别(Matlab代码实现)
- 每天干的啥?(2019.6)