📜  Laravel生成迁移

📅  最后修改于: 2021-01-05 10:48:21             🧑  作者: Mango

产生迁移

在上一个主题中,我们获得了laravel项目中已经可用的迁移知识。现在,我们将学习如何生成自己的迁移。

生成迁移的步骤

以下是生成迁移的步骤:

  • 打开Git bash窗口,然后键入以下命令:' php artisan make:migration create_posts_table–create =“ posts”

上面的输出显示已使用名称“ create_posts_table ”创建了迁移表。 ' -create =“ posts ”'是创建名称为“ posts ”的表的标志。我们遵循与laravel使用默认迁移表相同的规则来命名迁移表。

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

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

  • 打开迁移文件,该文件的结构如下所示:
class CreatePostsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
            Schema::create('posts', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->timestamps();
        });
    }

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

上面的代码是新生成的类,包含两个方法,即up()方法和down()方法。 up()方法实现create()方法,该方法包含两个参数,即表名(posts)和闭包函数。关闭函数包含Blueprint类,该类的对象$ table作为参数。这两个列是由Laravel创建的;第一列是名称为“ id”的自动递增列,第二列是timestamp类型。

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

public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('title')->unique();
            $table->text('body');
            $table->timestamps();
        }); }    

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

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

打开phpmyadmin查看迁移表。

上面的输出显示迁移已创建,还有“ posts ”表。

posts ”表的结构如下所示:

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

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

以下是将列添加到现有表中的步骤:

  • 打开Git bash窗口,然后输入以下命令: php artisan make:migration add_column_admin_is_to_table -table =“ posts”其中add_column_admin_is_to_table是迁移文件的名称,而-table =“ posts”是告知laravel我们是与职位表一起使用。

  • 迁移文件在xampp / htdocs / firstproject / database / migrations目录中创建,其中firstproject是laravel项目的名称。

  • 打开迁移文件,新创建的迁移文件的结构如下所示:
  • 我们在up()方法中添加以下代码:
  public function up()
    {
        Schema::table('posts', function (Blueprint $table) {
            $table->integer('is_admin')->unsigned();
        });
    }

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

  • 在Git bash窗口中输入migration命令,即php artisan migration

  • 打开phpMyAdmin以查看“ posts ”表的结构。

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

  • 如果我们想对该列进行一些修改,那么首先,我们需要回滚迁移。该命令是php artisan migrate:rollback

  • 当我们回滚迁移时,“职位”结构的结构看起来像:

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

  • 假设我要向is_admin列提供默认值,则可以按以下步骤完成:
public function up()
    {
        Schema::table('posts', function (Blueprint $table) {
            $table->integer('is_admin')->default('0');
        });
    }
  • 要将is_admin列再次以默认值0添加到posts表中,请运行migration命令。

  • 打开phpMyAdmin

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