Laravel 高阶消息意外结果

Jen*_*sen 5 php laravel laravel-collection laravel-6

我在 Laravel 中有一个更高阶的消息。它看起来像这样:

$category->scores->each->ratings->where('result.rating', '>=', 3)->count();
Run Code Online (Sandbox Code Playgroud)

Acategoryscores一个scorehasratings和 arating有一个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
Run Code Online (Sandbox Code Playgroud)

有3个评分结果。

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

mrh*_*rhn 5

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

在这里,您正在尝试对sumeach 调用执行 a ,每个调用都不会返回任何内容,而是Collection一种替代foreach.

如果将以下函数添加到评分模型中。

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

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

$category->scores->sum->ratingsOverTree();
Run Code Online (Sandbox Code Playgroud)