Laravel 迁移无法创建关系

Posted

技术标签:

【中文标题】Laravel 迁移无法创建关系【英文标题】:Laravel migration can't create relationship 【发布时间】:2020-04-13 17:20:22 【问题描述】:

我有 2 个表,用户和朋友请求,我想创建外键,但出现以下错误。

Illuminate\Database\QueryException : SQLSTATE[HY000]: 一般错误: 1005 无法创建表larasocial.#sql-1710_1f5 (errno: 150 "外键约束格式不正确") (SQL: alter table @987654323 @添加约束friend_requests_sender_id_foreign外键(sender_id)引用usersid)在更新级联上删除级联)

用户迁移文件

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateUsersTable extends Migration

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    
        Schema::create('users', function (Blueprint $table) 
            $table->bigIncrements('id');
            $table->string("name", 255);
            $table->string("surname", 255);
            $table->string("email", 255);
            $table->string("password", 255);
            $table->date("birthday");
            $table->string("gender", 255);
            $table->string("photo", 255);
            $table->integer("recover_code")->default(0);
            $table->boolean("confirmed")->default(false);
            $table->dateTime("last_visit");
            $table->date("created_at");
        );
    

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    
        Schema::dropIfExists('users');
    

friend_requests 迁移文件

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateFriendRequestsTable extends Migration

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    
        Schema::create('friend_requests', function (Blueprint $table) 
            $table->bigIncrements('id');
            $table->integer("sender_id");
            $table->integer("accepter_id");

            $table->foreign("sender_id")->references("id")->on("users")->onDelete("cascade")->onUpdate("cascade");
            $table->foreign("accepter_id")->references("id")->on("users")->onDelete("cascade")->onUpdate("cascade");
        );
    

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    
        Schema::dropIfExists('friend_requests');
    

我已经尝试过其他类似问题的方法,但它们并没有解决我的问题。

【问题讨论】:

使用相同的数据类型。您的 users.id 是大整数,而您的 friends_requests.sender_id 使用整数。 @EliasSoares 谢谢你的回答。问题解决了。 【参考方案1】:

外键列的数据类型必须与其指向的引用相同。由于您的用户 ID 是大整数,因此您的参考字段也必须是大整数。

为未来的观众编辑:

将两列更改为unsignedBigInteger

【讨论】:

谢谢,还加了->unsigned()。 ->bigInteger中的unsigned()与unsignedBigInteger相同

以上是关于Laravel 迁移无法创建关系的主要内容,如果未能解决你的问题,请参考以下文章

laravel 5.4 迁移无法正常工作

如何解决 laravel 迁移错误“一般错误:1005 无法创建表”

Laravel 每次迁移多个表

无法在 Laravel 5.3 迁移中应用约束/外部

Laravel 5.3 迁移:1215 无法添加外键约束

Laravel 一般错误:1005 无法创建表