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

Laravel Eloquent关联查询:如何获取主表及关联子表数据

Laravel Eloquent: 获取包含主表与关联子表的JSON结构

你遇到的问题很常见——当前代码直接查询了关联的子模型集合,所以只返回子表数据。要得到包含主表完整信息+子表数组的JSON结构,我们可以利用Eloquent的**预加载(Eager Loading)**功能来实现,具体步骤如下:

1. 确认模型关联定义正确

首先确保你的主模型(对应Master_Table,你代码里的PDH应该就是这个模型)已经正确定义了与子表的关联:

class PDH extends Model
{
    // 假设子表对应的模型是Product,关联外键是master_id
    public function products()
    {
        return $this->hasMany(Product::class, 'master_id');
    }
}

2. 使用预加载获取主模型+关联子表

你需要先预加载关联的products,同时可以通过闭包对子表添加查询条件,然后获取主模型对象,再转成JSON:

// 预加载products关联,并添加where条件
$masterData = PDH::with(['products' => function ($query) {
    $query->where('product_highlight_id', 1);
}])->find(1);

// 转换为你需要的JSON格式
$json = $masterData->toJson();

这样返回的JSON结构就会包含主表的所有字段(id、title、desc),以及一个products字段,其值是符合条件的子表数据数组,完全匹配你想要的格式。

为什么之前的代码只返回子表数据?

你之前的代码PDH::find(1)->products()->where('product_highlight_id', 1)->get(),本质是直接查询子表的数据集:products()返回的是关联查询构建器,后续的where()->get()会执行一个仅针对子表的SQL,自然只会返回子表数据,不会包含主模型的信息。

可选:懒加载关联(如果已先获取主模型)

如果你已经提前获取了主模型实例,也可以用load()方法懒加载关联:

$master = PDH::find(1);
// 懒加载符合条件的products关联
$master->load(['products' => function ($query) {
    $query->where('product_highlight_id', 1);
}]);

$json = $master->toJson();

额外提示:自定义返回字段

如果需要控制JSON中显示的字段,可以在模型中设置$visible属性,或者使用makeVisible()/makeHidden()方法调整:

// 比如只返回主表的id、title和子表数据
$masterData->makeHidden(['desc'])->toJson();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:06:48