【发布时间】:2020-02-12 01:06:15
【问题描述】:
我在 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 个评分结果。
我的高阶消息有什么问题?
【问题讨论】:
-
each代理实际上返回了分数集合(您可以从HigherOrderCollectionProxy 中的实现中了解原因)。这就是为什么链的其余部分不能按预期工作的原因,因为$category->scores->each->ratings返回$category->scores集合,并且对该集合应用where条件很可能总是返回0。所以基本上整个表达式等于$category->scores->where('result.rating', '>=', 3)->count();。
标签: php laravel laravel-6 laravel-collection