【问题标题】:Laravel 5 eager load a model without direct relationshipLaravel 5 急切加载没有直接关系的模型
【发布时间】:2017-04-12 00:54:10
【问题描述】:

我有..

模型

Player
id,player_name

Sport
id,sports_name

Game
id,player_id,sports_id,scores

模型关系

玩家 hasMany 游戏体育 hasMany 游戏 strong>、游戏 属于 玩家体育


问题:在 Controller 中,是否可能 加载 Sports 和每个 Games 每个运动的每个 玩家?

在单个查询中,我想在我的 Blade 中实现这样的目标..

@foreach($player as $p)
  @foreach ($p->sport as $ps) /*this wont work, since player has not relationship with sports*/
    @foreach ($ps->game as $psg)
      {{$psg->id}}
      {{$psg->player_name}}
      {{$psg->sports_name}}
      {{$psg->scores}}
    @endforeach    
  @endforeach
@endforeach

还有其他方法可以实现吗?谢谢!

【问题讨论】:

标签: php laravel eloquent laravel-5.2


【解决方案1】:

PlayerSport 之间的关系也是many-to-many

因此您可以在Player 模型中定义sports 关系为:

public function sports()
{
  return $this->belongsToMany('App\Sport', 'games')->withPivot('scores');
}

那么在您看来,您可以将foreach 写为:

@foreach($player as $p)
  @foreach ($p->sports as $s)
      {{$p->player_name}}
      {{$s->sports_name}}
      {{$s->pivot->scores}}
  @endforeach
@endforeach

【讨论】:

    【解决方案2】:

    你可以使用Nested eager loading:玩家有很多游戏,游戏属于一项运动。

    $player=Player::with('games','games.sport')->find($id);
    foreach($player->games as $game)
    {
       echo $game;
       echo $game->sport;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-07-06
      • 2021-11-29
      • 2018-12-11
      • 2017-09-17
      • 2013-06-10
      • 2015-06-19
      • 2017-11-26
      • 1970-01-01
      • 2017-01-12
      相关资源
      最近更新 更多