【问题标题】:Foreign key constraint is incorrectly formed, Laravel外键约束形成错误,Laravel
【发布时间】:2020-07-22 10:51:06
【问题描述】:

我尝试迁移 db,但出现错误,我不知道为什么。不确定什么是“格式不正确”。

//First Table
        Schema::create('lkp_anime_lists', function (Blueprint $table) {
            $table->id();
            //more columns here
        });
//Second one
        Schema::create('lkp_cards', function (Blueprint $table) {
            $table->id();
            $table->integer('lkp_anime_list_id');
        });

        Schema::table('lkp_cards', function ($table) {
            $table->foreign('lkp_anime_list_id')
                ->references('id')
                ->on('lkp_anime_lists')
                ->onDelete('cascade');
        });

SQLSTATE[HY000]: 一般错误: 1005 Can't create table anime_db.lkp_cards (errno: 150 "外键约束格式不正确") (SQL: alter table lkp_cards add constraint lkp_cards_lkp_anime_list_id_foreign外键(lkp_anime_list_id)在删除级联时引用lkp_anime_listsid

【问题讨论】:

  • 因为lkp_cards.lkp_anime_list_id 是未签名的,而lkp_anime_lists.id 不是。所以要么删除->unsigned(),要么将其添加到上面的lkp_anime_lists$table->id()
  • 一开始是没有的,但我还是重新测试了,我得到了同样的错误。
  • 编辑您的帖子以显示两列签名匹配的代码。
  • 好的,我做到了。
  • 新版本的 Laravel 使 id() 函数别名为 bigIncrements 所以你还需要将 $table->integer('lkp_anime_list_id'); 更改为 $table->bigInteger('lkp_anime_list_id');

标签: laravel laravel-7


【解决方案1】:

这对我有用

$table->bigInteger('lkp_anime_list_id')->unsigned();

适用于 Laravel 版本 6+

【讨论】:

    【解决方案2】:

    你应该使用

    $table->unsignedBigInteger('lkp_anime_list_id')
    

    而是因为主键和外键应该是相同的数据类型

    【讨论】:

    • 这就是答案,谢谢!但是你可以告诉我为什么在其他一些列上只使用“整数”?
    • 可能是因为您使用“increments()”方法创建了主键,该方法是无符号整数。但现在你开始使用 unsignedBigInteger 的“id()”方法
    猜你喜欢
    • 1970-01-01
    • 2020-12-23
    • 2020-04-04
    • 2022-11-27
    • 2021-07-27
    • 1970-01-01
    • 2021-04-21
    • 2021-07-22
    • 2017-05-06
    相关资源
    最近更新 更多