You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 12:27:02