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

Laravel 9中通过hasManyThrough获取关联的中间模型PingtreeEntry

解决方案

要同时获取中间模型PingtreeEntry和关联的Pingtree,你需要调整模型关联和查询逻辑,具体步骤如下:

1. 补充模型关联

首先在PingtreeGroup模型中添加直接关联PingtreeEntry的方法:

/**
 * 获取关联的中间模型 PingtreeEntry
 */
public function pingtreeEntries()
{
    return $this->hasMany(PingtreeEntry::class, 'pingtree_group_id');
}

然后在PingtreeEntry模型中添加关联Pingtree的方法(如果还没定义):

/**
 * 获取关联的 Pingtree 模型
 */
public function pingtree()
{
    return $this->belongsTo(Pingtree::class, 'pingtree_id');
}

2. 修改查询代码

使用嵌套预加载(Nested Eager Loading)同时加载PingtreeEntry及其关联的Pingtree,这样就能在获取PingtreeGroup时,同时拿到中间表和目标模型的数据:

$pingtreeGroups = PingtreeGroup::where('company_id', $company_id)
                                ->with('pingtreeEntries.pingtree')
                                ->withCount('pingtreeEntries') // 若需统计中间表条目数量,可替换原有的pingtrees count
                                ->paginate($request->input('perPage', 10));

说明

原来的hasManyThrough关联会直接跳过中间模型获取最终的Pingtree,不会携带PingtreeEntry的字段信息。通过嵌套预加载中间模型及其关联,你可以完整获取PingtreeGroup -> PingtreeEntry -> Pingtree的层级数据,同时保留中间表的所有字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:45:30