首页 > 解决方案 > Laravel 5.7 迁移 - 如何在可为空的外键上删除级联

问题描述

我有一个表,其中包含一个必须可以为空的外键。但是,它说它的格式不正确。这是我的迁移:

 Schema::create('menu_links', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('parent_id')->nullable();
        $table->integer('order')->default(0);
        $table->timestamps();

        $table->foreign('parent_id')->references('id')->on('menu_links')->onDelete('cascade');
    }); 

尝试迁移时,出现以下错误:

(errno: 150 "Foreign key constraint is incorrectly formed")

我怎样才能绕过它?提前致谢!

标签: databaselaravelmigration

解决方案


 Schema::create('menu_links', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('parent_id')->unsigned();
        $table->integer('order')->default(0);
        $table->foreign('parent_id')->references('id')->on('menu_links')->onDelete('cascade');
        $table->timestamps();
    }); 

由于 increments() 创建了一个无符号整数列,您还需要将外键列定义为无符号整数:

阅读:外键约束


推荐阅读