Laravel 高阶消息意外结果

Laravel higher order message unexpected result

我在 laravel 中有一个 higher order message。看起来像 这个:

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

一个category有一个scores,一个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个评分结果。

我的高阶消息有什么问题?

你的问题对高阶函数有一些误解。在文档和 Laravel 实现中,他们使用方法调用。

在这里你试图在每个调用上做一个 sum,每个调用都没有 return 任何东西,而是一个 Collection 方法来替代 foreach.

如果在评分模型中加入如下函数

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

您可以使用sum方法将结果相加,并使用ratingsOverTree()方法。

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