客戶訂單我有ID的數組如下:排序集合在雄辯
$ids = [5,6,0,1]
用雄辯的我能夠搜索這些標識的使用->whereIn('id', $ids)
功能。如預期的那樣,將按照Id的升序返回結果,有沒有方法可以按照數組的順序返回結果?或者按照$ids
陣列的順序轉換集合最簡單的方法是什麼?
客戶訂單我有ID的數組如下:排序集合在雄辯
$ids = [5,6,0,1]
用雄辯的我能夠搜索這些標識的使用->whereIn('id', $ids)
功能。如預期的那樣,將按照Id的升序返回結果,有沒有方法可以按照數組的順序返回結果?或者按照$ids
陣列的順序轉換集合最簡單的方法是什麼?
如果有一個特定的順序,你想,你就必須記錄使用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
和/或sortBy
的Laravel Docs了更具體的要求。
如果您確實沒有特定的順序,則可以在版本5.2及更高版本中使用->inRandomOrder()
,舊版本需要使用->orderBy(DB::raw('RAND()'))
的原始查詢。
你可以傳遞函數爲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
});
你錯過了「)」在你上面的$排序代碼片段。 –
修復了缺少支架錯字,謝謝。 – snh