gpt4 book ai didi

laravel - 如何修复在 Laravel 中迁移表时外键约束错误形成的错误

转载 作者:行者123 更新时间:2023-12-02 19:44:29 29 4
gpt4 key购买 nike

迁移我的数据库时,出现此错误。下面是我的代码,后面是我在尝试运行迁移时遇到的错误。

代码

public function up()
{
Schema::create('meals', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->integer('category_id')->unsigned();
$table->string('title');
$table->string('body');
$table->string('meal_av');
$table->timestamps();
$table->foreign('user_id')
->references('id')
->on('users')
->onDelete('cascade');
$table->foreign('category_id')
->references('id')
->on('categories')
->onDelete('cascade');
});
}

错误消息

[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1005 Can't create tablemeal.#sql-11d2_1 4 (errno: 150 "Foreign key constraint isincorrectly formed") (SQL: alter
table meals add constraint meals_category_id_foreign foreign key (category_id) references categories (id) on deletecascade)

最佳答案

在 Laravel 中创建新表时。将生成如下迁移:

$table->bigIncrements('id');

而不是(在旧的 Laravel 版本中):

$table->increments('id');

当使用bigIncrements时,外键需要一个bigInteger而不是integer。所以你的代码将如下所示:

public function up()
{
Schema::create('meals', function (Blueprint $table) {
$table->increments('id');
$table->unsignedBigInteger('user_id'); //changed this line
$table->unsignedBigInteger('category_id'); //changed this line
$table->string('title');
$table->string('body');
$table->string('meal_av');
$table->timestamps();

$table->foreign('user_id')
->references('id')
->on('users')
->onDelete('cascade');

$table->foreign('category_id')
->references('id')
->on('categories')
->onDelete('cascade');
});
}

您还可以使用 increments 而不是 bigIncrements,如 Kiko Sejio说。

Integer 和 BigInteger 之间的区别在于大小:

  • int => 32 位
  • bigint => 64 位

关于laravel - 如何修复在 Laravel 中迁移表时外键约束错误形成的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32669880/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com