外键 Laravel 8 foreignId + 约束 - 无法添加或更新子行:外键约束失败
Posted
技术标签:
【中文标题】外键 Laravel 8 foreignId + 约束 - 无法添加或更新子行:外键约束失败【英文标题】:Foreign Key Laravel 8 foreignId + constrained - Cannot add or update a child row: a foreign key constraint fails 【发布时间】:2021-09-21 01:53:27 【问题描述】:我有 'categories_blogs' 和 'blogs' 迁移。
我正在使用新的 foreignId,受 bigint 约束,在“博客”表中添加一行时出现以下错误:
无法添加或更新子行:外键约束失败(test
.blogs
, CONSTRAINT blogs_category_id_foreign
FOREIGN KEY (category_id
) REFERENCES categories_blog
(id
))
Schema::dropIfExists('categories_blogs');
Schema::create('categories_blogs', function (Blueprint $table)
$table->id();
$table->string('category_name');
$table->timestamps();
);
Schema::create('blogs', function (Blueprint $table)
$table->id();
$table->foreignId('category_id')->constrained('categories_blog');
$table->string('slug');
$table->string('title');
$table->timestamps();
);
没有 bigint 和旧外键方式,工作正常:
Schema::dropIfExists('categories_blogs');
Schema::create('categories_blogs', function (Blueprint $table)
$table->increments('id');
$table->string('category_name');
$table->timestamps();
);
Schema::create('blogs', function (Blueprint $table)
$table->increments('id');
$table->integer('category_id')->unsigned();
$table->foreign('category_id')->references('id')->on('blogs')->onDelete('cascade');
$table->string('slug');
$table->string('title');
$table->string('description');
$table->longtext('content');
$table->timestamps();
);
我该如何解决?谢谢!
【问题讨论】:
【参考方案1】:根据documentation,constrained()
方法会使用约定来确定表名:
$table->foreignId('category_id')->constrained('categories_blogs');
【讨论】:
你是对的!这就是问题所在,令人难以置信的疏忽。谢谢! 不要忘记将答案标记为已接受✅ 是的,我完成了,但你删除了它。问题只是因为我使用了 constrained('categories_blog') 而不是 constrained('categories_blogs')。以上是关于外键 Laravel 8 foreignId + 约束 - 无法添加或更新子行:外键约束失败的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 7 使用 request->route('id) 分配 foreignID?
SQLSTATE [HY000] Laravel 8 中的外键约束格式错误