首页 > 解决方案 > 如何使用嵌套的 Eager Loading 获取相关数据

问题描述

我正在使用三个模型,锦标赛、玩家和结果。我正在尝试获得每个锦标赛的结果以及他们在本次锦标赛中的结果,但是,我得到的是这个,有玩家的锦标赛以及他们在所有锦标赛中的结果。Tournament 和 Player 具有多对多的关系。

比赛模型

public function players()
{
    return $this->belongsToMany(Player::class)->withTimestamps();
}

播放器模型

public function playerTournamentResult()
{
    return $this->hasMany(Result::class);
}

我在打电话

public function getActiveTournamentsWithResult(): Collection
{
    return Tournament::with('players.playerTournamentResult')->where('status', true)->get();
}

这是结果表

id | tournament_id | player_id

标签: laraveleloquent

解决方案


您将获得来自不同锦标赛的所有结果,因为玩家hasMany模型中的关系正在获得所有结果,这解释了您的查询结果。

你像这样使用它:

 public function getActiveTournamentsWithResult(): Collection
 {
    $tournament = Tournament::where('status',true)->get();

    Result::where('tournament_id',$tournament->id)->get();
 }

推荐阅读