繁体   English   中英

Laravel:使用更新的迁移将列添加到表

[英]Laravel: Add column to table with updated migration

我正在尝试迁移一个迁移文件中的特定行。

例子:

前:

Schema::create('categories', function (Blueprint $table) {
  $table->bigIncrements('id');
  $table->string('category_name');
  $table->integer('parent_id')->nullable();
  $table->timestamps();
});

后:

Schema::create('categories', function (Blueprint $table) {
  $table->bigIncrements('id');
  $table->string('category_name');
  $table->string('img_url'); // ← new column
  $table->integer('parent_id')->nullable();
  $table->timestamps();
});

现在我只想迁移这一行: $table->string('img_url');

可能吗?

听起来您正在尝试向已通过迁移创建的表添加列。 如果是这种情况,您需要使用Schema::table(...)而不是使用Schema::create(...) ...) 。

通常,您会为此创建一个新的迁移:

$ php artisan make:migration add_img_url_to_categories

这将在/database/migrations上创建一个名为2019_10_21_165554_add_img_url_to_categories.php的新文件。 然后将此代码添加到up() function 中:

public function up()
{
  Schema::table('categories', function (Blueprint $table) {
    $table->string('img_url');
  });
}

您拥有的另一个选择是完全按照您所做的那样编辑迁移(根据您问题中的代码),然后运行:

$ php artisan migrate:fresh // drop all tables and re-run all migrations

或者

$ php artisan migrate:refresh // reset and re-run all migrations

但请记住,这些都是破坏性操作——这意味着您将丢失数据库中已有的任何数据。 在早期开发中,这可能无关紧要。 但是您应该真正养成为数据库更改创建迁移的习惯,而不是编辑现有迁移。

迁移的目的是让您(或使用您的应用程序的任何人)可以快速部署与您的应用程序期望的架构匹配的数据库。 在开发过程中,当您调整数据库架构以适应您正在开发的功能时,编辑迁移并不少见。

但是,一旦您部署或发布了您的应用程序,您应该考虑将所有迁移都锁定或只读。 从那时起的任何数据库更改都应在的迁移中完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM