尝试在Laravel中添加外键约束时,我收到以下错误。
[PDOException]
SQLSTATE[HY000]: General error: 1005 Can't create table 'ts.#sql-5769_62' (errno: 150)
我有2个表,users
和teams
。关系是团队可以有很多用户,用户有一个团队。
用户
$table->increments('id');
$table->integer('team_id');
$table->string('name', 255);
$table->string('username', 32)->unique();
$table->string('email', 320);
$table->string('password', 64);
$table->foreign('team_id')->references('id')->on('teams');
$table->timestamps();
队
$table->increments('id');
$table->string('team_name', 255);
$table->string('website', 255);
$table->timestamps();
我做错了什么?这也是我第一次使用迁移,所以欢迎任何指出愚蠢错误的帮助。
答案 0 :(得分:9)
尝试为unsigned
指定team_id
:
$table->integer('team_id')->unsigned();
您的主键$table->increments('id');
是无符号整数,因此外键$table->integer('team_id');
应与其类型匹配。
引自Laravel docs:
注意:创建引用递增的外键时 整数,记得始终使外键列无符号。
还要确保首先创建team
表,因此“架构”构建器不会尝试在非现有表上创建外键。