laravel学习笔记--数据库迁移

66 篇文章 4 订阅

生成迁移

如果生成迁移命令不指定生成名,那么就默认以users为表名

php artisan make:migration create_users_table

迁移的操作方法

面对的迁移的操作有两个方法: updown
方法up 的作用是向数据库中添加新的表或列或索引,
而 down的方法,就是up 方法的反向操作

就是说,up方法中就是添加操作,down方法中就是删除操作

up方法

  public function up()
    {
        Schema::create('photos', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

down方法

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

执行迁移

执行以下 migrate Artisan 命令,来执行未执行过的迁移

php artisan migrate

这个命令只会执行还没有迁移或修改过的文件,已执行完成 的不会再进行迁移
执行完成后会生成新的数据表,并且所有的迁移记录都记录在数据库中的
migrations数据表中


migration是记录迁移的文件,batch是记录迁移的次数,是第几次迁移
就是说,不是说执行了某个文件几次,而是第几次去执行它的,比如,上面图片中id为1,23,45的迁移是第一次执行迁移文件而生产的id为6的是第二次执行迁移文件而生成的

回滚迁移

要回滚到最后一次操作,可以使用 rollback 命令。此命令会回滚到最后 「一批」 的迁移,这可能会包含多个迁移文件

执行回滚命令

php artisan migrate:rollback

这条命令是回滚到最近的一次迁移,它会删除迁移记录和迁移的表

比如,我数据库中有这个迁移记录
在这里插入图片描述
执行回滚命令

php artisan migrate:rollback

执行成功后,迁移记录和表就会被删除了
在这里插入图片描述
通过向 rollback 命令加上 step 参数,可以回滚指定数量的迁移。例如,以下命令将回滚最后五个迁移

php artisan migrate:rollback --step=5

如果在迁移后觉得有误,可以使用重置命令 migrate:reset ,回滚刚才进行的所有迁移操作,以恢复到上一次迁移状态

php artisan migrate:reset

在生产环境中强制执行迁移
区分生产环境和开发环境,其实是在.env文件中,
里面的APP_ENV=local是开发环境
如果改成APP_ENV=production是生产环境
在生成环境中执行迁移命令是需要二次确认的,如果不需要二次确实 可以执行这个命令

php artisan migrate --force

使用一个命令同时进行回滚和迁移操作

使用 migrate:refresh命令将会回滚所有迁移操作,然后Laravel将自己继续执行 migrate 命令进行重新迁移。

就是说,先回滚,在迁移

php artisan migrate:refresh

在migrate:refresh中,还可以使用 step 参数来一次性选择回滚的次数。例如,以下命令将回滚并重新迁移最后五次迁移

php artisan migrate:refresh --step=5

使用一个命令同时进行删除和迁移操作

使用migrate:fresh 命令将会删除您已迁移的数据表,然后Laravel将自己继续执行 migrate 命令

php artisan migrate:fresh

这个命令和refresh 命令的区别就是执行过程不同,但是结果是相同
refresh命令是先回滚操作,在进行迁移
fresh命令是同时进行删除和迁移操作

还可以指定步数

php artisan migrate:fresh --seed

数据表

创建数据表

create 方法中可以接受两个参数,一个是表格的名称,第二个是 Closure ,作用是可以在定义一个新数据表的时候接受
Blueprint 对象

Schema::create('photos', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
            //使用$table对象可以生成字段
        });

检查表/列是否存在
可以使用 hasTable 和 hasColumn 方法来检测表/列是否存在

if (Schema::hasTable('users')) {      
#如果不存在'users'表则执行
    //
}

if (Schema::hasColumn('users', 'email')) {    
#如果不存在'users','email'列则执行
    //
}

更新字段属性
change 方法可以将现有的字段类型修改为新的类型或修改属性。
比如,你可能想增加。字符串字段的长度,可以使用 change 方法把 name 字段的长度从 25 增加到 50

Schema::table('users', function (Blueprint $table) {
    $table->string('name', 50)->change();
});

我们同样可以使用 nullable 将字段修改为允许为空:

Schema::table('users', function (Blueprint $table) {
    $table->string('name', 50)->nullable()->change();
});

重命名字段

Schema::table('users', function (Blueprint $table) {
    $table->renameColumn('from', 'to');
});

注意:当前不支持 enum 类型的字段重命名

删除字段

Schema::table('users', function (Blueprint $table) {
    $table->dropColumn('votes');
});

可以传递一个字段数组给 dropColumn 方法来删除多个字段:

Schema::table('users', function (Blueprint $table) {
    $table->dropColumn(['votes', 'avatar', 'location']);
});

创建索引

$table->string('email')->index();//创建主键索引
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小信啊啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值