mysql - 为什么在 Laravel 5.8 中创建外键失败?

标签 mysql laravel eloquent

下面的迁移脚本在旧版本的 Laravel 中运行顺利,但我将其添加到新的 Laravel 5.8 中并运行该脚本。我收到错误:外键格式不正确

评估迁移:

public function up() { 
    Schema::create('evaluation', function (Blueprint $table) { 
        $table->increments('id'); 
        $table->integer('user_id')->unsigned()->index(); 
        $table->timestamps();
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
    });
}

用户迁移:

public function up() { 
    Schema::create('users', function (Blueprint $table) { 
        $table->bigIncrements('id'); 
        $table->timestamps();
    });
}

最佳答案

正如我们在上面的评论中所讨论的,外键列必须与其引用的主键具有相同的数据类型。

您将 user.id 主键声明为 $table->bigIncrements('id'),它在 MySQL 中变为 BIGINT UNSIGNED AUTO_INCRMENT语法。

您必须将外键声明为 $table->unsignedBigInteger('user_id') ,它将在 MySQL 中变为 BIGINT UNSIGNED,使其与外键兼容到 user.id 列。

关于mysql - 为什么在 Laravel 5.8 中创建外键失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55678104/

相关文章:

arrays - 如何将数组存储到 session 中并在 Laravel 中调用它?

php - 在多个查询中应用相同规则的最佳方法是什么?

python - 如何在 Python 中访问由标签结构化的数据?

mysql - Laravel 查询构建器表连接

Laravel Sum 与 where 和 alias 与 Eloquent

php - Laravel - 调用模型的方法会抛出未定义的方法 Illuminate\Database\Query\Builder

php - Laravel 5.4 查询生成器存在 groupBy 问题

php - PHP/MySQL 仅部分支持 Unicode 字符?

mysql - 如何将多个值从一个表复制到另一个表? (多行)

mysql - Laravel Eloquent 模型按本地列和关系模型列值排序