@TERRAN47

Как отсортировать json поле по элементу в нем?

Добрых суток, Нужно список вывести по " hero_win_rate" кто на первом месте и тд,
ломаю голову как отсортировать json поле.
Hero::orderBy(hero_count_wins, 'desc')->orderBy(hero_win_rate, 'desc')->get();
так сортируются поля в таблице понятно,
а как отсортировать поле c расширением json с объектом в нем: {"hero1":[{"name_hero":"KOLOBOK","win_rate":"54%"}],"hero2":[{"name_hero":"ZAIKA","win_rate":"50%"}]}
где мне надо будет по win_rate сортировать
надо как то зайти в json поле каждого юзера отсортировать и отдать))) со всеми полями другими id ... думал на фронтенде это сделать безуспешно(
Просто не хочется кучу полей делать для каждого героя и их значений их много)
для каждого юзера тоже не хочется создавать 25 героев к примеру,
Как бы вы сделали у вас приходит стата героев и их надо обновлять каждому юзеру и выводить первого юзера и тд по количеству побед? на Laravel
  • Вопрос задан
  • 266 просмотров
Пригласить эксперта
Ответы на вопрос 2
wielski
@wielski
✔ Совет: Вам помогли? Отметьте ответы решением.
https://laravel.com/docs/5.4/collections

$array = json_decode(..., true);
$sorted = collect($array)->sortBy(function ($hero, $key) {
    return collect($hero)->sum('win_rate');
})->all();


Как-то так.
Возможно придется переписать под вашу структуру, но суть понятна.
Ответ написан
Можно попробовать еще на уровне БД https://laravel.com/docs/5.4/queries#json-where-clauses по аналогии.
Только нужно, чтобы поле было json. Поддержка появилась с недавних версий.
Иначе уже потом результаты сортировать по коллекции, как вам выше написали
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы