I have a higher order message in laravel. It looks like this:
$category->scores->each->ratings->where('result.rating', '>=', 3)->count();
A category
has scores
a score
has ratings
and a rating
has a result
.
I want to get the total amount of ratings for every category where >= 3
.
With the code I have right now the end result is always 0.
But when I loop over it like this:
@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
There are 3 rating results.
What is wrong with my higher order message?
There are a few misunderstandings of Higher Order Functions in your question. In the documentation and in Laravel
implementation they use method calls.
Here you are trying to do a sum
on an each call, each does not return anything, but is a Collection
method to be an alternative to foreach
.
If you add the following function to the score model.
public function ratingsOverTree()
{
return $this->ratings->where('result.rating', '>=', 3)->count();
}
You can use the sum
method to add together the results, with the usage of the ratingsOverTree()
method.
$category->scores->sum->ratingsOverTree();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With