使用迁移在laravel中重命名列

时间:2018-07-02 06:58:19

标签: laravel migration

我使用laravel 5.6

我想将author_ID更改为user_id

我有下面提到的列:

class CreatePostsTable extends Migration{

    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->increments('id');
            $table->bigInteger('author_ID');
            $table->bigInteger('category_ID')->nullable();
            $table->longText('post_content');
            $table->text('post_title');
            $table->string('post_slug', 200);
            $table->string('post_type', 20);
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('posts');
    }
}

我使用下面的链接更改列名:

How can I rename column in laravel using migration?

然后创建打击迁移:

php artisan make:migration rename_author_id_in_post_table

重命名迁移文件:

class UpdateUsernameInPostTable extends Migration{

    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->renameColumn('author_ID', 'user_id');
        });

    }

    public function down()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->renameColumn('user_id', 'author_ID');
        });
    }
}

但是使用运行命令:php artisan migrate我遇到以下错误:

Symfony\Component\Debug\Exception\FatalThrowableError  : 
Class 'RenameAuthorIdInPostTable' not found

3 个答案:

答案 0 :(得分:4)

该错误来自您的类名与PHP迁移文件的名称不对应的事实。文件名用于确定它们所包含的类的名称,因此,重要的是不要重命名一个类或文件而不重命名另一个。

将您的班级UpdateUsernameInPostTable重命名为RenameAuthorIdInPostTable,它应该可以工作。

如果没有,请运行composer dumpauto重新加载自动加载文件,它肯定会工作。

答案 1 :(得分:3)

删除现有迁移以更新名称之后,只需尝试此代码,

php artisan make:migration rename_author_id_in_posts_table --table=posts

它将创建一个迁移,然后在创建的迁移中以此替换up()和down()函数,

public function up()
{
    Schema::table('posts', function (Blueprint $table) {
        $table->renameColumn('author_ID', 'user_id');
    });
}

并且down()与此相关,

public function down()
{
    Schema::table('posts', function (Blueprint $table) {
        $table->renameColumn('user_id', 'author_ID');
    });
}

有关迁移的更多信息,您可以通过此链接Laravel Migrations

我希望这对您有用。如有任何疑问,请发表评论。

迁移问题:

您正在使用Schema::create()方法更改表,因为您已经为帖子表创建了迁移,所以无需执行Schema::create(),只需使用Schema::table()方法进行更新和更改任何字段。

Schema::create('posts', function (Blueprint $table) {
        $table->renameColumn('author_ID', 'user_id');
    });

答案 2 :(得分:-1)

最好的方法是检查我们的表中是否有某些列,只是在迁移时避免错误;)

 public function up()
    {
        if (Schema::hasColumn('table_name', 'old_col_name'))
        {
            Schema::table('table_name', function (Blueprint $table)
            {
                $table->renameColumn('old_col_name', 'new_col_name');
            });
        }
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        if (Schema::hasColumn('table_name', 'new_col_name'))
        {
            Schema::table('table_name', function (Blueprint $table)
            {
                $table->renameColumn('new_col_name', 'old_col_name');
            });
        }
    }