Laravel按关系列的条件排序



我有两个模型:

的球员,游戏

现在每个游戏都有两个关系,homePlayer: BelongsTo(Player) &awayPlayer: BelongsTo(球员)。这意味着在我的数据库中,游戏看起来是这样的:

游戏:

  • id
  • home_player_id
  • away_player_id
  • 得分

现在在玩家的个人资料中,我有一个显示他所有游戏的表格。我希望现在能够根据对手进行排序,这样与相同对手进行的比赛就会被"分组"。

我现在的问题是,对手有时是主队,有时是客队。这意味着我不能简单地按away_player排序,我必须按对手的id排序,有时可能是home_player_id,有时可能是away_player_id。

有什么建议告诉我如何解决这个问题吗?

class Game extends Model {
protected $with = ['homePlayer', 'awayPlayer'];
public function homePlayer(){
return $this->belongsTo(Player::class, 'home_player_id');
}
public function awayPlayer(){
return $this->belongsTo(Player::class, 'away_player_id');
}
}

可以在eloquent中传递闭包给groupBy。所以你可以在这里添加你的条件。

首先在模型中添加条件:

public function filter(Player $player)
{
if ($this->homePlayer->id === $player->id) {
return $this->awayPlayer;
}
if ($this->awayPlayer->id === $player->id) {
return $this->homePlayer;
}   
}

然后使用条件来获得组结果:

$games->groupBy(function ($game) use ($player) {
return $game->filter($player)->id;
});

相关内容

  • 没有找到相关文章

最新更新