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();
我在 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();