Laravel сообщение более высокого порядка неожиданный результат - PullRequest
4 голосов
/ 15 октября 2019

У меня есть сообщение более высокого порядка в laravel. Это выглядит следующим образом:

$category->scores->each->ratings->where('result.rating', '>=', 3)->count();

A category имеет scores a score имеет ratings, а rating имеет result.

Я хочу получить общее количество оценок для каждой категории where >= 3.

С кодом, который у меня есть сейчас, конечный результат всегда равен 0.

Но когда я повторяю цикл следующим образом:

@foreach($categories as $category)
    @foreach($category->scores as $score)
        @foreach($score->ratings->where('result.rating', '>=', 3) as $rating)
            {{ $rating->result->result_nl }}
        @endforeach
    @endforeach
@endforeach

Есть 3 результата оценки.

Что не так с моим сообщением более высокого порядка?

1 Ответ

4 голосов
/ 15 октября 2019

Есть несколько недоразумений функций высшего порядка, они показывают это с помощью вызова метода. Здесь вы пытаетесь внести сумму по каждому вызову, каждый ничего не возвращает, но является вызовом Collection для альтернативы foreach.

Если вы добавите следующую функцию в модель оценки.

public function ratingsOverTree()
{
    return $this->ratings->where('result.rating', '>=', 3)->count()
}

Вы можете использовать метод суммирования, чтобы сложить результаты с новым методом.

$category->scores->sum->ratingsOverTree();
...