【问题标题】:Count objects in related model if condition in third model is met如果满足第三个模型中的条件,则计算相关模型中的对象
【发布时间】:2023-04-07 17:03:01
【问题描述】:

我有五个模型:

  • 团队
  • 季节
  • 游戏
  • 统计
  • Stat_Meta

球队有赛季,赛季有比赛,比赛有数据,每个数据都与一个 stat_meta 相关。 stat_meta 表基本上是静态的,可以按类型对统计信息进行分类。

我正在处理 Stat_Meta 表中的一个函数,以便我可以调用任何特定的统计类型(或 stat_meta)来计算给定比赛、赛季或球队的范围内。

这对游戏来说真的很容易,因为我就是这样做的:

return $this->hasMany('App\Models\Stat', 'stat')->where('game_id', 1)->count();

但是,由于统计数据与赛季或球队没有直接关系(它们是通过与两者相关的比赛而相关的),这真的很麻烦。

我知道这是错误的,但我尝试过(它失败了)也许可以更清楚地说明我在这里要做什么:

return $this->hasMany('App\Models\Stat', 'stat')->where('game.season_id', 7)->count();

这样做给了我以下错误(有点明显):

未找到列:1054 未知列 'game.season_id' in 'where 子句'

经过大量谷歌搜索后,我还没有真正找到任何关于此的信息。有什么想法吗?

【问题讨论】:

    标签: php laravel orm eloquent


    【解决方案1】:

    TL;DRwithCount() - https://laravel.com/docs/5.8/eloquent-relationships#counting-related-models

    也许您可以通过参加赛季,然后参加比赛,然后计算您想要的统计数据来实现这一点。它看起来像这样

    $statIdenticator = 'somethingYouAreSearchingInStats';
    $season = Season::with(['games' => function($q1) use($statIdenticator) {
         return $q1->withCount(['stats' => function($q2) use($statIdenticator) {
             return $q2->where('statIdenticator', $statIdenticator);
         }]);
    }])->find($seasonId);
    

    没有测试过,但它应该在每个游戏上给你一个stats_count 参数。此时你只需要这样做$season->games->sum('stats_count')

    请勿复制粘贴,关于您的代码的信息不足,无法确保其有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-14
      • 2017-07-03
      • 2021-12-02
      • 1970-01-01
      • 2021-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多