首页 > 解决方案 > 如果满足第三个模型中的条件,则计算相关模型中的对象

问题描述

我有五个模型:

球队有赛季,赛季有比赛,比赛有数据,每一个数据都与一个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 'where 子句'中的未知列'game.season_id'

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

标签: phplaravelormeloquent

解决方案


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')

不要复制 paste,没有足够的关于你的代码的信息来确保它会起作用。


推荐阅读