【问题标题】:How to add one column to a DB table with Laravel migrations?如何使用 Laravel 迁移将一列添加到数据库表中?
【发布时间】:2019-03-19 03:10:07
【问题描述】:

我正在使用 Laravel 迁移文件来帮助为我的项目设置 MariaDB 架构。它适用于模式的初始表设置,但是在创建它之后,我如何(如果它甚至可能的话)将一个字段添加到迁移文件并在数据库中创建一个字段而不影响任何现有的字段/数据?

例如,假设我有一个 up 方法,如下所示:

public function up()
{
    Schema::create('test_table', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->timestamps();
    });
}

然后我想添加一个desc字段如下:

public function up()
{
    Schema::create('test_table', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('desc')->nullable();
        $table->timestamps();
    });
}

如果我在添加desc 字段后运行php artisan migrate,它会按预期工作,还是会弄乱预先存在的东西?我害怕在不知道会发生什么的情况下尝试,我想先检查一下。

另外,我尝试查看 Laravel 文档以获取此问题 (https://laravel.com/docs/5.7/migrations) 的答案,但找不到任何相关内容。
谢谢。

【问题讨论】:

    标签: php laravel mariadb laravel-migrations laravel-5.7


    【解决方案1】:

    通常,您应该在只需添加新字段的地方创建新迁移。方法up 应该是这样的:

    public function up()
    {
        Schema::table('test_table', function (Blueprint $table) {
            $table->string('desc')->nullable()->after('name');
        });
    }
    

    请注意,您在这里不使用Schema::create,而是使用Schema::table 来更新现有表。

    当然,如果您尚未部署应用并且可以从头开始,您可以修改现有迁移,但假设您不确定,最好的方法是创建新迁移,您只修改现有表。

    【讨论】:

      【解决方案2】:

      您应该在终端运行命令中执行此操作

      php artisan make:migration add_desc_field_in_test_table --table=test_table
      

      然后,在migration 文件的up() 函数中,创建字段:

      public function up()
      {
          Schema::table('test_table', function (Blueprint $table) {
              $table->string('desc')->nullable();
          });
      }
      

      它不会弄乱当前的表结构。它只会在test_table添加desc

      【讨论】:

        猜你喜欢
        • 2016-07-11
        • 2015-01-26
        • 2020-02-17
        • 2019-10-10
        • 1970-01-01
        • 2018-07-18
        • 2018-02-06
        • 1970-01-01
        • 2016-08-02
        相关资源
        最近更新 更多