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

Laravel保存页面后返回关联分类名称而非category_id的实现方法

Laravel 模型关联+返回分类名实现方案

第一步:编写两个模型的关联关系

  • Page(页面/文章)模型:单个页面归属于一个分类,使用belongsTo关联
    打开app/Models/Page.php,添加如下方法:
    public function category()
    {
        // 外键是category_id,符合框架默认约定,第二个参数可省略
        return $this->belongsTo(Category::class);
    }
    
  • Category(分类)模型:单个分类下包含多个页面,使用hasMany关联
    打开app/Models/Category.php,添加如下方法:
    public function pages()
    {
        return $this->hasMany(Page::class);
    }
    

关联定义默认约定:主模型主键为id,关联表外键为主模型名小写_id,你的表结构用的category_id刚好符合约定,不需要额外传参指定外键。

第二步:修改store方法,返回带分类名的数据

保存Page模型后,使用load()方法延迟加载关联的分类数据,返回的JSON就会携带分类信息。另外注意你原代码校验了image字段但没写上传存储逻辑,补全后完整代码如下:

public function store(Request $request)
{
    $request->validate([
        'title' => 'required|max:255',
        'image' => 'required|mimes:jpg,jpeg,png|max:8192',
        'language' => 'required'
    ]);

    $page = new Page;
    $page->title = $request->title;
    $page->slug = $request->slug;
    $page->content = $request->contents;
    $page->category_id = $request->cat_id;
    $page->language = $request->language;
    
    // 补全图片上传存储逻辑
    if ($request->hasFile('image')) {
        $page->image = $request->file('image')->store('page-images', 'public');
    }

    $page->save();

    // 加载关联分类数据,只查询id和name字段减少冗余,不需要字段筛选可以去掉:id,name
    $page->load('category:id,name');

    // 如果不想嵌套category结构,只想平级返回category_name,可以加下面两行
    // $page->category_name = $page->category->name;
    // $page->makeHidden('category');

    return response()->json([
        'data' => $page,
        'success' => 'File uploaded successfully.'
    ]);
}

返回效果说明

默认返回的data结构中会包含嵌套的category对象,可直接取分类名:

{
  "data": {
    "id": 1,
    "title": "xxx",
    "category_id": 2,
    "category": {
      "id": 2,
      "name": "分类名称"
    }
  },
  "success": "File uploaded successfully."
}

内容的提问来源于stack exchange,提问作者Rapunzel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:39:13