Laravel 5.5
Есть коллекция моделей разного типа:
модель Участник [
type = {школьник или студент}
year = год
olimp_id = связь с моделью олимпиады
rating = результат в баллах
position = место в рейтинге
]
Нужно проставить каждому его место в рейтинге по году-олимпиаде-категории-рейтингу.
Вроде бы, groupBy() идеально подходит, но на последнем этапе он группирует модели по рейтингу в разнобой: отсортировать через sortBy() не помогает, из-за этого естественно позиция проставляется неверно. Подскажите, что тут можно придумать или может я вообще по неправильному пути пошел?
$rating = $this->rating->groupBy(['year','olimp_id', 'model_type', 'rating']);
$rating->each(function ($year_item, $year) {
$year_item->each(function ($olimp_item) {
$olimp_item->each(function ($model_type_item) use(&$position) {
$position = 0;
$model_type_item->each(function ($rating_item) use(&$position) {
$position++;
$rating_item->each(function ($model) use($position) {
$model->update(['position' => $position]);
});
});
});
});
});