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

Laravel多表关联查询如何嵌套获取评论关联的用户数据

Laravel 嵌套关联(帖子-评论-用户)查询实现

你当前使用的是Laravel Eloquent ORM的预加载功能,要实现多层嵌套关联查询,直接利用预加载的点语法即可,不需要写复杂的join语句,具体操作如下:


1. 修改预加载参数声明嵌套关联

把原查询里的with('comments')改成with('comments.user'),Eloquent会自动按层级加载「帖子下的所有评论」+「每条评论对应的用户信息」,修改后的查询代码如下:

$post = Posts::where('id', $id)->with('comments.user')->first();

2. 确认Comments模型中已定义User关联

嵌套预加载生效的前提是App\Models\Comments模型中提前定义了和User模型的关联关系,评论与用户是从属关系,关联方法示例如下:

// 写在Comments模型内部
public function user()
{
    // 请根据实际表字段调整参数:
    // 第一个参数为关联模型路径,第二个是评论表存储用户ID的外键字段,第三个是用户表的主键字段
    return $this->belongsTo('App\Models\User', 'userId', 'id');
}

扩展:需要自定义关联查询条件的写法

如果后续需要对评论、关联用户加筛选规则(比如只查审核通过的评论、只查正常状态的用户),可以用闭包嵌套的写法自定义关联查询逻辑:

$post = Posts::where('id', $id)
    ->with([
        'comments' => function($commentQuery) {
            // 仅查询审核通过的评论
            $commentQuery->where('status', 1)
                ->with([
                    'user' => function($userQuery) {
                        // 仅查询未被封禁的用户
                        $userQuery->where('is_banned', 0);
                    }
                ]);
        }
    ])
    ->first();

查询完成后遍历$post->comments时,每条评论对象下会自动挂载user属性,直接访问就能拿到对应的用户数据,不会产生N+1查询问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 02:27:30