Как реорганизовать php foreach, используя функцию сбора карт Laravel (Eloquent's) - PullRequest
1 голос
/ 13 марта 2019

Я только что посмотрел видео Адама Уотана на Рефакторинг циклов и условных выражений и чувствую, что могу использовать метод сбора map в методе sumLeagueStats на моем Team модель (а не foreach).

У меня есть отношения по командам -> лиги, а функция getLeagueStats получает всю статистику (сыграно, выиграно, сыграно вничью, проиграно, за, против, очков) из таблицы leagues для соответствующей команды.

В методе sumLeagueStats я собирался использовать цикл foreach и проходить по каждой статистике по годам, брать сумму всех воспроизведенных и т. Д. И возвращать ее, но, посмотрев вышеупомянутое видео,

<b>class Team extends Model</b> {

    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, поэтому сначала хочу проверить. мои подозрения верны, и, во-вторых, я ищу любую информацию / ресурс для получения дополнительной информации, так как документации немного не хватает).

1 Ответ

0 голосов
/ 13 марта 2019

Вызов 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')
]);

это то, что вы хотите?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...