2017-01-28 2 views
1

Мне нужно после получения запроса от sql с Eloquent, создать groupBy('date') и sortBy('price') с collect в Laravel 5.3.Как использовать sortBy после groupBy в сборе в Laravel 5.3?

В IndexController:

$flights = Flights::GetFlights($fromCity, $toCity, $fromDate); 

$collection = collect($flights); 

$sortFlight = $collection->groupBy('date')->sortBy('price'); 

В Model:

public function scopeGetFlights($query, $fromCity, $toCity, $fromDate) 
{ 
    // Between dates 
    $beforeDate = date('Y-m-d', strtotime($fromDate . '- 10 days')); 
    $afterDate = date('Y-m-d', strtotime($fromDate . '+ 10 days')); 

    $join = $query 
     -> join('airlines', 'airlines.pana', 'flights.airline') 
     -> where('flights.from_city', $fromCity) 
     -> where('flights.to_city', $toCity) 
     -> whereBetween('flights.date', [$beforeDate, $afterDate]) 
     -> get([ 
       'flights.*', 
       'airlines.pana as pana', 
       'airlines.name as airlineName' 
       ]); 
    return $join; 
} 

Затем Print_r($sortFlight), после печати groupBy('date') это работает но sortBy('price') не работает !!!!

Где моя проблема?

+0

Привет @Punit .., Как использовать 'SortBy ('flights.price')' в Collect? – mySun

ответ

2

От doc

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

Так после выполнения groupBy() сделать следующий образом.

$sorted = $collection->sortBy('price'); 
$sorted->values()->all(); 
+0

Привет, Как использовать 'groupBy' в коллекции? – mySun

+0

То, как вы сделали groupBy(), является правильным. Просто добавьте часть sortBy() в результат groupBy() – Gayan

+0

Plus, вам не нужно делать '$ collection = collect ($ flights);'. do 'GetFlights() -> get()' и это коллекция. – Gayan

1

Попробуйте одну строку

$sortFlight = $collection->groupBy('date')->sortBy('price')->values()->all(); 
+0

Привет, '$ collection-> groupBy ('date') -> sortBy ('price') -> values ​​() -> all();' не работает! – mySun

+0

Нет, я не хочу «groupBy» в «Красноречии». Мне нужно использовать для сбора. – mySun

+0

Что вы хотите получить в первой группе по дате и с учетом этой группы по цене по цене или после группировки по дате снова сортировать по цене в целом? – Vikash

Смежные вопросы