Laravel框架下文章添加多个关联分类的实现方法咨询
实现文章多分类关联的修改步骤
- 第一步:调整请求参数与验证规则
前端提交分类时将原来的单个blog_category_id改为数组格式的blog_category_ids(示例格式:[1,3,5]),对应修改控制器的验证规则,可直接通过验证判断所有传入的分类ID是否合法,不需要单独编写查询判断逻辑:
$validator = Validator::make($request->all(), [ 'blog_category_ids' => 'required|array', 'blog_category_ids.*' => 'numeric|exists:blog_categories,id', 'title' => 'required|max:128', 'slug' => 'required|unique:articles|max:64', 'subtitle' => 'max:256', ]);
- 第二步:删除单分类冗余逻辑
原代码中查询单个分类、给$article->blog_category_id赋值的代码全部删除即可,多对多关联通过中间表存储关系,你的articles表本身没有blog_category_id字段,原有赋值逻辑本身是无效的。 - 第三步:保存文章后调用attach方法关联多分类
文章保存成功后,直接调用关联方法的attach接口,传入分类ID数组即可自动批量创建中间表关联:
$article->save(); // 新增这行代码即可实现多分类关联 $article->blog_categories()->attach($request->blog_category_ids);
修改后完整的控制器代码
public static function saveArticle(Request $request) { $validator = Validator::make($request->all(), [ 'blog_category_ids' => 'required|array', 'blog_category_ids.*' => 'numeric|exists:blog_categories,id', 'title' => 'required|max:128', 'slug' => 'required|unique:articles|max:64', 'subtitle' => 'max:256', ]); if ($validator->fails()) { return response()->json([ 'message' => $validator->errors()->first() ], 422); } $article = new Article(); $article->title = $request->title; $article->slug = $request->slug; $article->subtitle = $request->subtitle; $article->save(); // 批量关联分类 $article->blog_categories()->attach($request->blog_category_ids); // 返回时预加载分类信息,方便前端直接使用 return Article::where('slug', $article->slug)->with('blog_categories')->first(); }
补充说明
如果后续需要编辑文章时更新分类关联,可使用sync方法替代attach,会自动删除旧关联、新增新关联,不需要手动处理中间表数据:
$article->blog_categories()->sync($request->blog_category_ids);
内容的提问来源于stack exchange,提问作者user16978178
相关产品推荐
相关产品推荐

