mskr
@mskr

Как отсортировать сгруппированную коллекцию?

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]);
				});
			});
		});
	});
});
  • Вопрос задан
  • 110 просмотров
Решения вопроса 1
@Si-Dge
$model_type_item->sortByDesc(function ($item) {
	return $item->first()->rating;
})->each(function ($rating_item) use(&$position) {

https://laracasts.com/discuss/channels/laravel/sor...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы