调用未定义的方法Illuminate \ Database \ Schema \ MySqlBuilder :: dropForeign()

时间:2017-01-01 16:27:49

标签: php laravel

class CreateCommentsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('comments', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email');
            $table->text('comment');

            $table->boolean('approved');
            $table->integer('post_id')->unsigned();
            $table->timestamps();
        });

        Schema::table('comments', function (Blueprint $table) {
            $table->foreign('post_id')->references('id')->on('posts');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropForeign(['post_id']);
        Schema::dropIfExists('comments');
    }
}

这是我的迁移类的样子,我一直在尝试从数据库中删除该表,但它会引发错误。

错误

  

调用未定义的方法Illuminate \ Database \ Schema \ MySqlBuilder :: dropForeign()

我已经阅读了文档,但它似乎没什么帮助。

任何人都可以指出我的错误,解决方案是什么?

就这样你知道,我是laravel的新手。对我很轻松。谢谢!。

2 个答案:

答案 0 :(得分:3)

需要使用dropForeign对象在Schema::table下调用

Blueprint

Schema::table('comments', function (Blueprint $table) {
        $table->dropForeign('comments_post_id_foreign');
    });

这遵循<table_name>_<foreign_table_name>_<column_name>_foreign的命名惯例。

OR

Schema::table('comments', function (Blueprint $table) {
        $table->dropForeign(['your_key_name']);
    });

答案 1 :(得分:1)

你使用了错误的语法。它应该是:

Schema::table('comments', function (Blueprint $table) {
    $table->dropForeign('comments_post_id_foreign');
});

https://laravel.com/docs/5.3/migrations#foreign-key-constraints