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';
。
我正在尝试使用 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';
。