遇见Laravel Migrations的migrate与rollback
来源:互联网 发布:淘宝店铺查询 编辑:程序博客网 时间:2024/06/15 00:38
之前创建项目的时候使用了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_17class 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
这就是我整个实现migrations过程,其中大部分程手册中都有,我只是把我觉得比较重要的部分记录了下来.就如开始所说,我们有的时候在migrate过程中出现了一些小错误,需要执行migrate:rollback指令:
php artisan migrate:rollback --step[=step]其中可选参数step为rollback的步数.这时,系统会根据之前migrations表中的batch字段,逐次的进行rollback,每执行一次rollback,就相当于是回退到了上一次migrate的地方.
同时我在整个过程中遇到的问题主要是第二次执行make:migrations时,与之前的文件名字重复,导致出现了重名类.
后来通过上面需要注意的点解决了这个问题.
本人刚刚接触这些东西也没多久,如果有错误的地方,还希望提出宝贵意见.
今天就先到这里,谢谢!
- 遇见Laravel Migrations的migrate与rollback
- bundle install rake db:rollback 与 db:migrate:redo的区别
- Laravel Migrate
- Laravel之Migrations学习笔记
- laravel 中 使用migrate对字段的删除 修改
- rollback与flashback的区别
- laravel 利用migrate 创建数据表
- Laravel 创建指定表 migrate
- Django - “No migrations to apply” when run migrate after makemigrations
- 关于laravel中的迁移库migrations
- Mybatis-Migrations 基本的使用方法与注意的地方
- 事务的commit work与rollback work
- Laravel 5.1 超级大坑 CentOS 7 文件路径大小写敏感造成的Migrate异常
- Laravel数据库迁移文件migrate使用约定
- laravel 执行migrate出现 1071异常
- Laravel 5.4 php artisan migrate 报错
- Laravel 5框架学习之数据库迁移(Migrations)
- @@ERROR 与ROLLBACK TRANSACTION
- llinux之管理网络练习
- python简单文本文件读取
- MySQL丢数据及主从数据不一致的场景
- netty源码分析之-服务端启动核心源码分析(5)
- 算法储备之快速排序
- 遇见Laravel Migrations的migrate与rollback
- Android设计模式之装饰模式
- 2017.10.17
- Gradle基础知识——Groovy的闭包
- python3中将`&#x`(《新)的字符串转化为utf-8
- CSRF学习笔记之CSRF的防御
- 提高django性能
- file类、输入输出流和缓冲流
- memcache讲解和在.net中初使用