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)
Acategory有scores一个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个评分结果。
我的高阶消息有什么问题?
您的问题中有一些对高阶函数的误解。在文档和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)