数据库:迁移
简介
迁移就像数据库的版本控制,允许你的团队定义和共享应用程序的数据库架构定义。如果你曾经不得不告诉队友在从源代码控制中拉取你的更改后手动向其本地数据库架构添加列,你就面临了数据库迁移解决的问题。
Laravel Schema 门面为在 Laravel 支持的所有数据库系统中创建和操作表提供了数据库无关的支持。通常,迁移将使用此门面来创建和修改数据库表和列。
生成迁移
你可以使用 make:migration Artisan 命令生成数据库迁移。新迁移将被放置在 database/migrations 目录中。每个迁移文件名包含一个时间戳,允许 Laravel 确定迁移的顺序:
php artisan make:migration create_flights_tableLaravel 将使用迁移名称尝试猜测表的名称以及迁移是否会创建新表。如果 Laravel 能够从迁移名称确定表名,Laravel 将使用指定的表预填充生成的迁移文件。否则,你可以简单地在迁移文件中手动指定表。
如果你想为生成的迁移指定自定义路径,可以在执行 make:migration 命令时使用 --path 选项。给定的路径应该相对于应用程序的基本路径。
NOTE
可以使用存根发布自定义迁移存根。
压缩迁移
随着你构建应用程序,你可能会随着时间的推移积累越来越多的迁移。这可能导致 database/migrations 目录变得臃肿,可能有数百个迁移。如果你愿意,可以将迁移「压缩」到单个 SQL 文件中。首先,执行 schema:dump 命令:
php artisan schema:dump
# 转储当前数据库架构并修剪所有现有迁移...
php artisan schema:dump --prune执行此命令时,Laravel 将向应用程序的 database/schema 目录写入一个「架构」文件。架构文件的名称将对应于数据库连接。现在,当你尝试迁移数据库并且没有执行其他迁移时,Laravel 将首先执行你正在使用的数据库连接的架构文件中的 SQL 语句。执行架构文件的 SQL 语句后,Laravel 将执行不属于架构转储的任何剩余迁移。
如果你的应用程序测试使用与本地开发期间通常使用的数据库连接不同的数据库连接,你应该确保使用该数据库连接转储了架构文件,以便你的测试能够构建你的数据库。你可能希望在转储本地开发期间通常使用的数据库连接后执行此操作:
php artisan schema:dump
php artisan schema:dump --database=testing --prune你应该将数据库架构文件提交到源代码控制,以便团队中的其他新开发人员可以快速创建应用程序的初始数据库结构。
WARNING
迁移压缩仅适用于 MariaDB、MySQL、PostgreSQL 和 SQLite 数据库,并使用数据库的命令行客户端。
迁移结构
迁移类包含两个方法:up 和 down。up 方法用于向数据库添加新表、列或索引,而 down 方法应该反转 up 方法执行的操作。
在这两个方法中,你可以使用 Laravel 架构构建器来表达性地创建和修改表。要了解 Schema 构建器上可用的所有方法,请查看其文档。例如,以下迁移创建一个 flights 表:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* 运行迁移。
*/
public function up(): void
{
Schema::create('flights', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('airline');