Laravel 迁移中的外键导致一般错误 1215

Foreign Key on Laravel Migration causing General Error 1215

我正在尝试使用 Laravels 迁移创建多个带有外键的 table。我有一个迁移问题 table 就像这样

Schema::create('problems', function($table)
        {
            $table->increments('id');
            $table->integer('created_by')->unsigned();
            $table->foreign('created_by')->references('id')->on('users');
            $table->integer('category')->unsigned();
            $table->foreign('category')->references('id')->on('categories');
            $table->timestamps();
        });

类别迁移

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

我进入用户迁移的第一个外键工作正常,但一旦它命中类别 ID 的外键,它就会给出

SQLSTATE HY000 General Error 1215 Impossible d'ajouter des contraintes d'index externe (SQL; alter table 'problems' add constraint problems_category_foreign foreign key ('category') references 'categories' ('id'))

(我无法正确阅读法语,我不知道为什么它会给我法语错误。我无法找到更改它的方法,因为我不是法语,也无法理解它)

我不明白为什么这对一个有效,而对另一个无效,因为它们本质上是一样的。

我不得不在不同的迁移文件中添加外键,解决了这个问题。

您需要确保迁移文件的顺序正确无误。例如,在实际创建类别 table 本身之前,您不能使用引用类别 table 上的 id 的外键创建问题 table。

法语错误问题,看这个question

您必须更改迁移顺序

|-database/
|--migrations/
|---2015_02_02_141725_create_problems_table.php
|---2015_03_01_234626_create_categories_table.php

应该是:

|-database/
|--migrations/
|---2015_01_01_234626_create_categories_table.php
|---2015_02_02_141725_create_problems_table.php

最后:

php artisan migrate

几天前我遇到了同样的问题,问题如下:

在使用 $table->increments('id'); 时,它生成一个 unsigned 整数 长度为 10$table->integer('user_id') 生成一个 长度为 11.

的非 unsigned 整数

要修复它,您可以放弃 unsigned 并将所有与其他字段相关的 table 设置为 auto increment 字段,如下所示:

$table->integer('id', true); // true represents the auto increment type

当然,还要设置 $table->engine = 'InnoDB';