Laravel学习笔记基础系列--(十八)Laravel 数据库迁移文件的使用

作者: 温新

分类: 【Laravel】

阅读: 1840

时间: 2021-07-18 14:22:21

作者:温新

时间:2021-06-27

有了数据库,项目才是完整的。之前的所有演示中都没有记录关于数据库的操作,从这篇文章开始,将进入数据库相关操作的学习记录。

我们使用一个新的项目进行演示。请跟我一起创建一个新的项目,并配置好数据库的连接操作。 此后的操作与前1-17篇没有关联关系,因此大胆尽情的进行数据库操作吧。

新项目创建完成后,请打开app/database/migrations目录 ,会看到三个迁移文件,其中一个是user1迁移文件。这是一个创建users表的迁移文件,先不要管它是什么意思,跟着操作一步一步来。

删除migrations目录下的所有文件。

删除完成后跟着来操作吧,体验迁移文件的不同。

快速使用迁移文件

第一步:创建迁移文件

命令:make:migration

php artisan make:migration create_users_table

该命令会在database/migrations目录下生成对应的文件。

迁移文件命令一定要注意规范,件名知意。create_users_table创建用户表。

生成之后查看一下迁移文件的结构

// migrations/2021_06_27_234013_create_users_table.php
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateUsersTable extends Migration
{
	// 创建数据表
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

	 // 用户回滚删除
    public function down()
    {
        Schema::dropIfExists('users');
    }
}

第二步:编写迁移文件

// 2021_06_27_234013_create_users_table.php
public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->string('email')->unique();
        $table->string('password');
        $table->timestamps();
    });
}

第三步:运行迁移生成数据表

命令:make:migrate

含义:运行所有迁移文件

php artisan migrate

若报错:SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes 请参考 Larabel迁移文件时报SQLSTATE[42000]错误的解决方法

运行后就会在数据库中生成users表了。另外一个migrations表用于迁移回滚操作。

迁移文件的其他操作

添加字段

第一步:创建迁移文件

php artisan make:migration add_nickname_to_users_table --table=users

添加一个nickname字段到users表,--table=users指定该字段要添加到的表。

执行php artisan migrate后,需要添加字段,千万不要修改原来的迁移文件,添加字段仍旧需要创建一个新的迁移文件。

第二步:编辑迁移文件

Schema::table('users', function (Blueprint $table) {
    $table->string('nickname',60)->nullable();
});

第三步:运行迁移文件

php artisan migrate

只要涉及到对迁移文件的操作,就三个步骤就无可避免了。

回滚操作

回滚是一件非常危险的事情,特别是在生产环境中,使用回滚之前一定要确认、确认、再确认。

回滚最新的一新迁移

php artisan migrate:rollback

我们先后生成了一表,并且在这个表中增加了一个字段,migrations数据表batch记录着2。当我们执行最新一次回滚后,migrations表发生了变化,但是对应的增加的这个表没有被回滚掉,仍旧在users表中,这点需要注意。

指定回滚条数

php artisan migrate:rollback --step=3

回滚应用所有迁移

php artisan migrate:reset

数据及表全部没有

回滚和迁移

php artisan migrate:refresh
    
php artisan migrate:refresh --seed

数据同样全部没有。refresh可以看到是先resetmigrate,也就是先删除后创建。

删除所有表和迁移

php artisan migrate:fresh

migrate:fresh 命令将会先从数据库中删除所有表然后执行 migrate 命令:

回滚特性练习

运行php artisan migrate并且数据库手动添加一些数据,此操作需要反复运行。

migrate:reset回滚

表和数据全部没有,毁灭级(尸骨不存)

migrate:refresh回滚

表存在,数据没有了,毁灭级(保留全尸)

migrate:fresh回滚

表存在,数据没有了,毁灭级(保留全尸)

修改数据列

自身是不支持修改数据字段的,要修改数据字段需要安装依赖包。

安装依赖包

composer require doctrine/dbal

修改字段

仍旧是那三个步骤。现在我们把nickname长度修改成nickname(80)。关于修改表名,暂未看到,有待研究。

第一步:创建迁移文件

php artisan make:migration alter_nickname_to_users_table --table=users

第二步:修改迁移文件

public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->string('nickname',80)->nullable()->change();
    });
}

第三步:执行迁移

php artisan migrate

关于更多的修改操作,请参考文档。

我是温新

每天进步一点点,就一点点

请登录后再评论