我刚刚在Refactoring Loops and Conditionals上观看了Adam Wathan的视频,觉得我可以在我的sumLeagueStats
模型的Team
方法中使用map收集方法了(宁可比foreach)。
我在团队->联赛中有关系,getLeagueStats
函数从leagues
表中获取所有统计数据(打,赢,提,输,换,对分)相关团队。
在sumLeagueStats
方法中,我将使用foreach
循环并逐年循环查看每个统计信息,并获取所有已播放内容的总和,等等,然后将其返回,但是已经观看了上面的视频
class Team extends Model { public function league() { return $this->hasMany('league'); } public function getLeagueStats($year = [2018]) { return $this->league()->whereIn('year', [$year])->get(); } public function sumLeagueStats($year = [2018]) { foreach { ... return } /* * Want to return a colleciton with the following: * $this->getLeagueStats()->sum('played'); $this->getLeagueStats()->sum('won'); $this->getLeagueStats()->sum('drew'); $this->getLeagueStats()->sum('lost'); $this->getLeagueStats()->sum('for'); $this->getLeagueStats()->sum('against'); $this->getLeagueStats()->sum('points'); */ } }
我是Laravel的新手,所以首先要检查一下。我的猜想是正确的,其次是寻找文档的任何见解/资源以获取更多信息,因为文档略有不足。
答案 0 :(得分:0)
每次调用getLeagueStats
方法时,每次调用sum
都会向数据库发出请求,因此您可以创建一个要使用的变量并创建一个表示数据的集合:
$stats = $this->getLeagueStats();
return collect([
'played' => $stats->sum('played'),
'won' => $stats->sum('won'),
'drew' => $stats->sum('drew'),
'won' => $stats->sum('won'),
'lost' => $stats->sum('lost'),
'for' => $stats->sum('for'),
'points' => $stats->sum('points')
]);
这是您想要的吗?