2017-01-28 86 views
1

我需要從SQL與雄辯後得到查詢,創建groupBy('date')sortBy('price')collectLaravel 5.3如何在groupBy中使用sortBy在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')'的收集? – 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);'。做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