生成迁移

17 Mar 2025 | 4 分钟阅读

在上一节中,我们已经学习了 Laravel 项目中已经可用的迁移。现在,我们将学习如何生成我们自己的迁移。

生成迁移的步骤

生成迁移的步骤如下

  • 打开 Git bash 窗口并输入以下命令:
    php artisan make:migration create_posts_table --create="posts"
Laravel Generating Migrations

上述输出显示迁移表已使用名称“create_posts_table”创建。“--create="posts”是使用名称“posts”创建表的标志。我们遵循与 Laravel 对默认迁移表相同的命名规则。

  • 要查看迁移表,请打开目录“C:\xampp\htdocs\firstprojectproject\database\migrations”。
Laravel Generating Migrations

上述输出显示名称为“create_posts_table”的迁移表已成功创建。

  • 打开迁移文件,此文件的结构如下所示

上面的代码是新生成的类,它包含两个方法,即 up() 方法和 down() 方法。 up() 方法实现了 create() 方法,该方法包含两个参数,即表的名称(帖子)和闭包函数。 闭包函数包含 Blueprint 类,并将其对象 $table 作为参数。 两列由 Laravel 创建; 第一列是自增列,名称为“id”,第二列是时间戳类型。

假设我添加了下面代码中显示的另外两列

现在我们将进行迁移以运行以上代码。 打开 Git bash 窗口以运行 migrate 命令。

Laravel Generating Migrations

上面的命令在数据库中创建迁移表。

打开 phpmyadmin 以查看迁移表。

Laravel Generating Migrations

上述输出显示迁移已创建,并且还显示了“posts”表。

下面显示了“posts”表的结构

Laravel Generating Migrations

使用迁移将列添加到现有表

我想在已经创建的表中添加新列。 我不想移动回已创建该表的文件,删除该表,然后重新创建该表,并重新迁移它。 因此,我将创建一个新的迁移文件,该文件将新列添加到现有表中。

将列添加到现有表的步骤如下

  • 打开 Git bash 窗口并输入以下命令
    php artisan make:migration add_column_admin_is_to_table --table="posts",其中 add_column_admin_is_to_table是迁移文件的名称,--table="posts" 是标志,它告诉 laravel 我们正在使用 posts 表。
Laravel Generating Migrations
  • 迁移文件创建于 xampp/htdocs/firstproject/database/migrations 目录中,其中 firstproject 是 laravel 项目的名称。
Laravel Generating Migrations
  • 打开迁移文件,新创建的迁移文件的结构如下
  • 我们在 up() 方法中添加以下代码

上面的代码显示我们正在添加新列,即 is_admin 到 posts 表。

  • 在 Git bash 窗口中输入 migrate 命令,即 php artisan migrate
Laravel Generating Migrations
  • 打开 phpMyAdmin 以查看“posts”表的结构。
Laravel Generating Migrations

在上面的输出中,我们观察到已创建新列,即 is_admin,并且整数的类型是 unsigned。 unsigned 整数表示此列不包含任何负数。

  • 如果我们想对该列进行一些修改,那么首先,我们需要回滚迁移。 命令是 php artisan migrate:rollback
Laravel Generating Migrations
  • 当我们回滚迁移时,“posts”结构的结构将如下所示
Laravel Generating Migrations

上面的输出显示 is_admin 列已从表中删除。

  • 假设我想为 is_admin 列提供默认值,则可以执行以下操作
  • 要再次将 is_admin 列添加到具有默认值 0 的 posts 表中,请运行 migrate 命令。
Laravel Generating Migrations
  • 打开 phpMyAdmin
Laravel Generating Migrations

上面的输出显示 is_admin 列已添加到 posts 表中,默认值为 0。