迁移Laravel 5.8时出错外键

时间:2019-09-02 06:31:06

标签: php laravel migration laravel-5.8

我在Laravel 5.8上出现错误

我在外键约束上遇到错误。这是我的架构。

public function up()
{
    Schema::create('subcategories', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->integer('category_id')->unsigned();
        $table->string('name');
        $table->timestamps();

        $table->foreign('category_id')->references('id')->on('categories');
    });
}

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

4 个答案:

答案 0 :(得分:1)

尝试一下

Schema::create('subcategories', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->bigInteger('category_id')->unsigned();
    $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
    $table->string('name');
    $table->timestamps();
});

答案 1 :(得分:0)

我认为您应该尝试将Categories放在桌子上方,并将sub categories放在桌子下方。因为当您运行此命令时,它将首先尝试创建子类别,该子类别需要尚不存在的类别ID。

答案 2 :(得分:0)

引用键必须具有相似的数据类型。请检查表中的外键列的数据类型。整数类型的大小和符号必须相同。

答案 3 :(得分:0)

您正在categories之后创建subcategories表。创建subcategory表时,值得注意的是称为categories。因此会引发错误。

要解决此问题,您可以做两件事

  1. categories表之前创建subcategories表。 (master-slave table / parent-child table
  2. 创建一个单独的迁移文件以更新外键。创建一个新文件,然后像下面这样在外键下面添加

    $table->foreign('category_id')->references('id')->on('categories');