Laravel красноречивый несколько запросов - PullRequest
0 голосов
/ 29 января 2019

Мне нужно отсортировать мою коллекцию по дате, а затем отсортировать строки с одинаковой датой по расстоянию.

Я проделал тот же процесс, когда работал со статусом и расстоянием, это было проще, потому что язнаю значения статуса, по которым я хочу отсортировать коллекцию, теперь с датами, которые я не могу исправить, это значения.

Вот моя работа со статусом:

if($result){
        if($data['status'] == true){
            $result = $result->sortBy('listing.status')->values();

            if($sqlDistance != null){
                $res = $result->where('distance_km', '!=', null);

                $resNull = $result->where('distance_km', '=', null)->all();

                $statusNotPlanned = $res->where('listing.status', 0)->sortBy('distance_km')->values()->all();
                $statusPlanned = $res->where('listing.status', 1)->sortBy('distance_km')->values()->all();
                $statusDone = $res->where('listing.status', 2)->sortBy('distance_km')->values()->all();

                $res = array_merge($statusNotPlanned, $statusPlanned, $statusDone);
                $result = array_merge($res, $resNull);
            }

            return response()->json(['status' => 200,'type' => 'status', 'data' => $data, 'events' => (is_object($result)) ? array_slice($result->toArray(),$data['offset']*10,10) : array_slice($result,$data['offset']*10,10), 'cities' => $cities]);
        }

Теперь мне нужно сделатьто же самое, но с датой вместо статуса:

Вот где я сейчас нахожусь:

 elseif($data['date'] == true ) {
            $result = $result->sortBy('date_end')->values();

            $res = $result->where('date_end', '!=', null)->all();
            $resNull = $result->where('date_end', '=', null)->all();
            $result = array_merge($res, $resNull);

            return response()->json(['status' => 200,'type' => 'date', 'data' => $data, 'events' => (is_object($result)) ? array_slice($result->toArray(),$data['offset']*10,10) : array_slice($result,$data['offset']*10,10), 'cities' => $cities]);
        }

Это мой текущий вывод:

    {
    date_end : 12/07/2018,
    distance : 320km

    },
   {
  date_end : 12/08/2018,
  distance : 110km

   },
   {
  date_end : 12/08/2018,
  distance : 100km

    },
   {
    date_end : 12/08/2018,
   distance : 120km

   },
    {
    date_end : 12/09/2018,
    distance : 480km

    }

Это желаемый вывод:

   {
  date_end : 12/07/2018,
  distance : 320km

    },
     {
    date_end : 12/08/2018,
    distance : 100km

    },
    {
    date_end : 12/08/2018,
    distance : 110km

    },
    {
   date_end : 12/08/2018,
   distance : 120km

},
{
  date_end : 12/09/2018,
  distance : 480km

}

1 Ответ

0 голосов
/ 29 января 2019

Кто-то в этом выпуске Github предложил следующее:

$result->sortBy(function($item) {
      return [$item->date_end, $item->distance_km];
});
...