如何通过Laravel迁移向数据库表添加一列?

时间:2018-10-14 15:08:10

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

我正在使用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();
    });
}

如果我在添加php artisan migrate字段后运行desc,它将按预期运行,还是会弄乱现有的内容?恐怕不知道会发生什么,我想先检查一下。

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

2 个答案:

答案 0 :(得分:2)

通常,您应该在添加新字段的地方创建新迁移。方法up应该看起来像这样:

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

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

当然,如果您尚未部署应用程序并且可以从头开始,则可以修改现有迁移,但是如果不确定,最好的方法是在仅修改现有表的情况下创建新迁移。

答案 1 :(得分:0)

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

php artisan make:migration add_desc_field_in_test_table --table=test_table

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

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

它不会弄乱当前表的结构。它将添加desc中的列test_table中。