Laravel学习笔记基础系列--(十八)Laravel 数据库迁移文件的使用
作者:温新
时间: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
可以看到是先reset
后migrate
,也就是先删除后创建。
删除所有表和迁移
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
关于更多的修改操作,请参考文档。
我是温新
每天进步一点点,就一点点