【问题标题】:Get most common values in column of related model in Eloquent在 Eloquent 的相关模型列中获取最常见的值
【发布时间】:2018-03-04 01:09:15
【问题描述】:

我正在使用 Eloquent ORM,并试图根据锦标赛中的胜利找出对俱乐部来说最成功的运动是什么。
我有表clubstournamentssportstournament_results,每个表都由一个模型(ClubTournamentSportsTournamentResult)表示,并带有关系。我表中的相关列:
clubstournamentssports 每个包含idname
tournament_resultsidtournamentclub、@ 987654338@。

关系:
ClubHasManyClubResults
TournamentResultBelongsToTournamentBelongsToClub
Tournament 有 @9876 @ 和 TournamentResultsBelongsToSport
SportHasManyTournament

关于获得我想要的结果的想法是这样的:
Club -> TournamentResults -> where place = 1 -> Tournaments -> get n (e.g. 3) most common sports in this set

到目前为止我所拥有的是:

$club = Club::findOrFail($id);
$club->tournamentResults()->where('place', 1)->with('tournament.sport');

但现在我不知道如何继续。有人可以帮我找到解决方案吗?

【问题讨论】:

  • 您能否将关系(BelongsTo、HasMany 等)添加到您的问题中?
  • 好的,现在更新了
  • 这更像是一个数据库问题。我将从在您的数据库管理软件中构建查询开始,然后从那里开始。可能想对运动名称进行分组,并按胜利总和或其他东西排序。如果没有看到架构,这是一个很难回答的问题。希望对您有所帮助。

标签: php laravel orm eloquent


【解决方案1】:

将此关系添加到您的 Club 模型中:

public function wonTournaments() {
    return $this->belongsToMany(Tournament::class, 'tournament_results')
        ->wherePivot('place', 1);
}

那么你可以这样做:

$topSport = $club->wonTournaments->groupBy('sport_id')
    ->sortByDesc(function($tournaments) {
        return $tournaments->count();
    })
    ->first()->first()->sport;

【讨论】:

  • 感谢您的回答,但我收到以下异常:BadMethodCallException: "Method Illuminate\Database\Query\Builder::sortByDesc does not exist."
  • 你是不是不小心写了wonTournaments()而不是wonTournaments
猜你喜欢
  • 2017-12-07
  • 1970-01-01
  • 2016-12-19
  • 1970-01-01
  • 1970-01-01
  • 2017-11-08
  • 2018-12-04
  • 2017-12-02
  • 1970-01-01
相关资源
最近更新 更多