如何使用迁移在Laravel中创建和管理数据库表

来自菜鸟教程
跳转至:导航、​搜索

Laravel 数据库迁移 允许开发人员快速引导、销毁和重新创建应用程序的数据库,而无需登录数据库控制台或运行任何 SQL 查询。

在本指南中,您将创建一个数据库迁移以设置保存应用程序链接的表。 为此,您将使用 Laravel 默认附带的 Artisan 命令行工具。 最后,您将能够只使用 artisan 命令多次销毁和重新创建数据库表。

首先,请确保您位于应用程序的根目录中,并且您的 Docker Compose 开发环境已启动并正在运行:

cd ~/landing-laravel
docker-compose up -d
Outputlanding-laravel_app_1 is up-to-date
landing-laravel_nginx_1 is up-to-date
landing-laravel_db_1 is up-to-date

接下来,创建数据库迁移以设置 links 表。 Laravel 迁移 允许开发人员以编程方式创建、更新和销毁数据库表,作为数据库模式的版本控制系统。

要创建一个新的迁移,您可以运行 make:migration Artisan 命令,这将在您的 Laravel 应用程序中引导一个新类,位于 database/migrations 文件夹中。 这个类将包含一个默认的样板代码。

记得使用 docker-compose exec app 在安装 PHP 的 app 服务容器上运行命令:

docker-compose exec app php artisan make:migration create_links_table
OutputCreated Migration: 2020_11_18_165241_create_links_table

Note: The migration name is generated based on the current date and time, and the name provided as an argument to the make:migration command. For that reason, your migration file name will differ slightly. For the exact file name, check with the following:

find ~/landing-laravel/database/migrations -name '*create_links_table.php'
Output/home/sammy/landing-laravel/database/migrations/2020_11_18_165241_create_links_table.php

使用您选择的编辑器打开生成的迁移类:

nano database/migrations/2020_11_18_165241_create_links_table.php

接下来,更新 up 方法以包含存储应用程序数据所需的表列。

将迁移类的当前内容替换为以下代码。 突出显示的值是唯一需要添加的行,因此如果您愿意,也可以只复制那些突出显示的行并将它们包含到 Schema::create 定义中:

数据库/迁移/2020_10_12_171200_create_links_table.php

<?php

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

class CreateLinksTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('links', function (Blueprint $table) {
            $table->id();
            $table->string('url', 200);
            $table->text('description');
            $table->boolean('enabled')->default(true);
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('links');
    }
}

除了包含在使用 Artisan 命令自动生成的表定义中的默认字段之外,您还在此表中包含三个新字段:

  • url :用于保存链接 URL 的字符串字段。
  • description :用于保存链接描述的文本字段。
  • enabled :存储链接状态的字段,无论是否启用。 boolean Schema 类型将生成一个 tinyint 无符号字段来存储 01 的值。

添加完这些字段后,保存您的迁移文件。 接下来,使用以下命令运行迁移:

docker-compose exec app php artisan migrate
OutputMigration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (152.46ms)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (131.12ms)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (101.06ms)
Migrating: 2020_11_18_165241_create_links_table
Migrated:  2020_11_18_165241_create_links_table (60.20ms)

您会注意到其他迁移也与 create_links_table 一起执行。 这是因为默认的 Laravel 安装带有用户迁移(带有 users 表和 password_resets 表)和排队作业(带有 failed_jobs 表)。 Because your demo application won’t use these features, it is safe to remove those migrations now; however, you may also opt to leave them in place if you are working on an application of your own and you plan on developing it further. 所有迁移文件都位于应用程序根文件夹中的 database/migrations

有关数据库迁移的更多详细信息,请参阅我们的指南 如何使用数据库迁移和播种器在 Laravel 中抽象数据库设置。

在本系列的下一部分中,您将创建一个自定义 Artisan 命令来列出、插入和删除应用程序链接表中的条目。