Laravel hasManyThrough获取查询结果的中间模型

xu3bshqb  于 2023-01-31  发布在  其他
关注(0)|答案(1)|浏览(141)

我正在做一个Laravel 9项目,我有一个名为PingtreeGroup的模型,我需要通过我的PingtreeEntry模型获取所有关联的Pingtree模型。
我的查询按预期工作,并且正在连接最远的模型,即我的Pingtree
我遇到的问题是,我还需要将实际的PingtreeEntry模型连接到最远的模型,或者以某种方式获得PingtreeEntry模型。
这是我当前的PingtreeGroup模型关系:

/**
 * Get the pingtrees for the model
 */
public function pingtrees()
{
    return $this->hasManyThrough(
        Pingtree::class,
        PingtreeEntry::class,
        'pingtree_group_id',
        'id',
        'id',
        'pingtree_id'
    );
}

然后我的问题:

$pingtreeGroups = PingtreeGroup::where('company_id', $company_id)
                                ->with('pingtrees')
                                ->withCount('pingtrees')
                                ->paginate($request->input('perPage', 10));

我怎样才能达到这个理想的结果呢?

qnakjoqk

qnakjoqk1#

我假设PingtreeEntry-Pingtree是一对一的关系。

// in Pingtree model add this relationship 
public function pingtree_entry()
{
   return $this->belongsTo(Pingtree::class);
}

并更新查询以调用此关系

$pingtreeGroups = PingtreeGroup::where('company_id', $company_id)
    ->with('pingtrees', 'pingtrees.pingtree_entry')
    ->withCount('pingtrees')
    ->paginate($request->input('perPage', 10));

现在,从单个PingtreeGroup可以获得多个Pingtree。
在每个Pingtree中,你可以从PingtreeEntry获取数据。
例如,我们获取单个PingtreeGroup

$pingtreeGroup = PingtreeGroup::where('company_id', $company_id)
    ->with('pingtrees', 'pingtrees.pingtree_entry')
    ->first();

// get the first Pingtree
$pingTree = $pingtreeGroup->pingtrees()->first();

// and inside this Pingtree , you get fetch PingtreeEntry
$pingtreeEntry = $pingTree->pingtree_entry;

现在您可以在此PingtreeEntry中获取任何类型的数据。
希望这能帮到你。

相关问题