2016-11-22 128 views
2

客戶訂單我有ID的數組如下:排序集合在雄辯

$ids = [5,6,0,1] 

用雄辯的我能夠搜索這些標識的使用->whereIn('id', $ids)功能。如預期的那樣,將按照Id的升序返回結果,有沒有方法可以按照數組的順序返回結果?或者按照$ids陣列的順序轉換集合最簡單的方法是什麼?

回答

5

如果有一個特定的順序,你想,你就必須記錄使用Collection Methods

爲了讓您的ID在您所指定的非常具體的命令,你可以使用sortBy方法如下,其中收集您的收藏模式:

$ids = [ 5, 6, 0, 1]; 

$sorted = $collection->sortBy(function($model) use ($ids) { 
    return array_search($model->getKey(), $ids); 
}); 

// [ 5, 6, 0, 1] // (desired order) 

要隨機化您的收藏,您可以使用shuffle方法。

$collection = collect([1, 2, 3, 4, 5]); 

$shuffled = $collection->shuffle(); 

$shuffled->all(); 

// [3, 2, 5, 1, 4] // (generated randomly) 

查看shuffle和/或sortByLaravel Docs了更具體的要求。

如果您確實沒有特定的順序,則可以在版本5.2及更高版本中使用->inRandomOrder(),舊版本需要使用->orderBy(DB::raw('RAND()'))的原始查詢。

+1

你錯過了「)」在你上面的$排序代碼片段。 –

+0

修復了缺少支架錯字,謝謝。 – snh

0

你可以傳遞函數爲sortBy方法來執行復雜的排序:

$ids = [5,6,0,1]; 

$collection = YourModel::whereIn('id', $ids)->sortBy(function($model) use ($ids) { 
    // Access your array order here and modify the sorting here 
});