在eloquent中从子集合中获取自己的数据和受限制的变量集合

时间:2018-05-28 10:11:48

标签: laravel-5 eloquent

首先,抱歉,当问题描述没有很好地描述我的问题但我不知道如何在一行中更好地形成我的问题。建议欢迎..

背景信息

  • Laravel 5.6.x
  • 我将我的对象定义为雄辩的模型
  • 使用迁移创建数据库

有关应用程序的背景信息

我有一个应用程序,其中Game对象与Player个对象具有一对多的关系。 Game对象包含所有游戏详细信息,Player对象包含单个玩家的所有详细信息。

玩家被邀请参加比赛并且可以接受否认。此信息保存在播放器中,因为播放器每场比赛都是唯一的。

现在我要创建所有游戏的概述。概述中的一个内容是接受的玩家受邀玩家及其 id 的数量。

为了获得所有游戏,我使用$games = Game::all();为我提供所有游戏阵列(没有玩家)。我可以通过执行以下操作将玩家添加到阵列中:

foreach ($game as $singleGame){
   $singleGame->players
}

之后,我的$ games数组包含所有游戏,每个游戏都有玩家的子游戏。这几乎是我所需要的,但是子集合包含有关播放器的许多细节,例如玩家拥有的手牌。

问题 是否有一种简单的方法可以将每个玩家的invite_statusplayer_id值添加到游戏的子集合而不是所有玩家变量中?

1 个答案:

答案 0 :(得分:1)

这应该可以解决问题:

$games = Game::with(['players' => function( $query){
    $query->select('invite_status', 'player_id');
}])->get();

使用循环来获取每个游戏的玩家将对每个游戏进行查询,这非常糟糕。使用with()会使用一个查询加载所有这些字段,并使用select()指定所需的字段。