我的博客项目是开源的,如果有人想运行这个博客看看的话,Laravel 数据库迁移可以让我们的数据结构保持一致。在博客项目中,创建文章依赖于专栏,先来实现专栏数据表的迁移和数据填充。
Laravel 的数据库迁移就像是数据库的版本控制,让你的团队能够轻松地去定义和共享程序的数据库结构。迁移通常配合 Laravel 的结构生成器,可以轻松生成应用程序的数据库结构。如果团队中有成员在他的本地数据库环境中手动的添加了某个字段,那么你将会面对如何解决数据库迁移的问题。
移除多余迁移文件
Laravel 项目迁移文件都存放在database/migrations目录下,Laravel 项目默认生产了 4 个迁移文件:
- 2014_10_12_000000_create_users_table.php
- 2014_10_12_100000_create_password_resets_table.php
- 2019_08_19_000000_create_failed_jobs_table.php
- 2019_12_14_000001_create_personal_access_tokens_table.php
�
Laravel 默认创建的四个迁移文件,一个用于构建用户表,一个用于构建密码重置表,一个用于构建任务失败表,一个是构建访问令牌的表。这四个迁移文件�在我的博客项目中用不到,所以这里全部删除。
rm database/migrations/2014_10_12_000000_create_users_table.phprm database/migrations/2014_10_12_100000_create_password_resets_table.phprm database/migrations/2019_08_19_000000_create_failed_jobs_table.phprm database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php
创建专栏迁移文件
接下来创建专栏迁移文件:
php artisan make:migration create_columns_table
�打开 {timestamp}_create_columns_table.php 文件看看默认代码:
<?phpuse Illuminate\Database\Migrations\Migration;use Illuminate\Database\Schema\Blueprint;use Illuminate\Support\Facades\Schema;return new class extends Migration{/*** Run the migrations.** @return void*/public function up(){Schema::create('columns', function (Blueprint $table) {$table->id();$table->timestamps();});}/*** Reverse the migrations.** @return void*/public function down(){Schema::dropIfExists('columns');}};
可以看到在该文件里面定义了一个匿名类,并继承自 Migration 基类。此类有两个方法 up 和 down :
- 当我们运行迁移时,
up方法会被调用; - 当我们回滚迁移时,
down方法会被调用。
�创建数据表
在 up 方法里面,我们通过调用 Schema 类的 create 方法来创建 columns 表:
Schema::create('columns', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
create 方法会接收两个参数:一个是数据表的名称,另一个则是接收 $table(Blueprint 实例)的闭包。
默认的数据表字段
迁移类中通过 Blueprint 的实例 $table 为columns表创建所需的数据库字段。接下来让我们来详细讲解Blueprint实例 $table 的基本用法:
$table->id();
id()是 bigIncrements()的封装,此方法创建了一个 bigint unsigned类型的自增长 id。
$table->timestamps();
由 timestamps 方法创建了一个 created_at 和一个 updated_at 字段,分别用于保存用户的创建时间和更新时间。
回滚迁移
down方法会在回滚命令发起时被调用,是 up 方法的逆向操作。在上面的代码中,up 创建了 columns 表,那么这里将会通过调用 Schema 的 drop 方法来删除 columns 表。
新增字段
专栏数据表除了默认的 id、created_at 和 updated_at 三个字段外还要新增一个name字段:
$table->string('name');
由 string() 方法接受两个参数,第一个参数是字段名称,这里传输入name,第二个参数是字符长度,可以省略,默认是 255。name字段用于保存专栏名称。
.
.
.
public function up()
{
Schema::create('columns', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
}
.
.
.
修改 .env文件
在迁移之前,还需要对应用根目录下的 .env 文件进行设置,为应用指定数据库名称 blog。
.
.
.
DB_DATABASE=blog
DB_USERNAME=root
DB_PASSWORD=secret
.
.
.
执行迁移
运行下面的命令来生成执行迁移:
php artisan migrate
migrate 命令会执行所有未被执行过的迁移,执行完成后可以看到有 2 个表,分别是:
migrations—— 第一次执行artisan migrate命令时生成的,其作用是用来做迁移版本columns—— 专栏表,保存专栏数据。

