Laravel:onDelete('设置null')迁移错误

时间:2018-02-13 20:52:27

标签: php sql laravel database-migration

编辑:解决方案比我更容易,迁移按字母顺序进行,我的类别迁移是在我的帖子迁移后创建的,这意味着当添加外键时categories.id列还不存在,导致错误。更改名称以便首先创建类别表解决了问题。

为了更好地了解Laravel,我决定建立一个标准的博客网站。我有三个模型,User,Post和Category,我尝试在帖子迁移中设置一些关系:

public function up()
{
    Schema::create('posts', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('user_id')->unsigned()->index();
        $table->integer('category_id')->unsigned()->nullable();
        $table->string('title');
        $table->text('body');
        $table->timestamps();

        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        $table->foreign('category_id')->references('id')->on('categories')->onDelete('set null');
    });
}

第一个关系有效,但第二个关系错误,因为onDelete('set null')错误Cannot add foreign key constraint (SQL: alter table 'posts' add constraint 'posts_category_id_foreign' foreign key ('category_id') references 'categories' ('id') on delete set null)。我也试过添加这样的外键,但是我得到了同样的错误:

Schema::table('posts', function (Blueprint $table) {
    $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
    $table->foreign('category_id')->references('id')->on('categories')->onDelete('set null');
});

但是,如果我删除第二次迁移并在HeidiSQL中手动添加它,它可以正常工作: 1] 据我所知,使用set null需要做两件事,使列可以为空(我已经完成),并添加与onDelete('set null')的关系。在Laravel 5.5中根本不支持onDelete('set null'),还是我做错了什么?

如果重要,我的类别迁移:

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

0 个答案:

没有答案