【问题标题】:General error: 1005 when creating a key constraint - Laravel一般错误:创建键约束时出现 1005 - Laravel
【发布时间】:2013-12-30 05:03:21
【问题描述】:

尝试在 Laravel 中添加外键约束时,出现以下错误。

[PDOException]                                                                                
SQLSTATE[HY000]: General error: 1005 Can't create table 'ts.#sql-5769_62' (errno: 150)

我有 2 张桌子,usersteams。关系是团队可以有许多用户,而用户有一个团队。

用户

$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();

我做错了什么?这也是我第一次使用迁移,所以欢迎任何帮助指出愚蠢的错误。

【问题讨论】:

  • “尝试添加外键约束时”---你是怎么做的?
  • 抱歉我没关注?
  • 看来为什么不行。

标签: php mysql laravel laravel-4


【解决方案1】:

尝试为team_id指定unsigned

$table->integer('team_id')->unsigned();

你的主键 $table->increments('id'); 是一个无符号整数,所以外键 $table->integer('team_id'); 应该匹配它的类型。

引用自Laravel docs

注意:创建引用递增的外键时 整数,请记住始终使外键列无符号。

更新

还要确保先创建 team 表,这样架构构建器就不会尝试在不存在的表上创建外键。

【讨论】:

  • teams 表上没有未签名
  • “你的主键 $table->increments('id'); 是一个无符号整数”---是什么让你这么想?
  • $table->increments('id'); 创建的列总是无符号的。这就是架构构建器的工作方式。
  • 无论如何,+1d 你,因为它看起来像一个答案:-)
  • 只是另一个提示。您应该先创建team 表,也许架构构建器在创建users 表时无法引用team 表,因为team 表还不存在。我不确定模式构建器是否可以自动处理。
猜你喜欢
  • 1970-01-01
  • 2017-05-06
  • 2020-12-19
  • 2019-11-14
  • 2020-03-09
  • 2018-02-04
  • 2021-09-20
  • 2020-12-02
  • 2022-01-25
相关资源
最近更新 更多