[英]Laravel Eloquent - find order
我從數據庫中獲得3條記錄
return \App\Work::find([12, 2, 3]);
令人討厭的是,當我將它們傳遞給視圖時,它們會重新排序。
有沒有辦法保留它們“被發現”的順序?
MySQL允許您使用以下語法為給定字段指定順序:
SELECT * FROM work ORDER BY FIELD(id, 12, 2, 3);
結合orderByRaw()
的orderByRaw()
方法( https://laravel.com/api/5.5/Illuminate/Database/Query/Builder.html#method_orderByRaw ),您應該可以執行以下操作:
return \App\Work::whereIn('id', [12, 2, 3])->orderByRaw('FIELD (id, 12, 2, 3)')->get();
find()
方法不適用於此方法,因為它會立即返回對象,因此我們需要使用WHERE IN
子句作為ID。 顯然,由於當前ID已重復,因此需要進行一些重構,但這應該可以實現您想要的。
像這樣嘗試sortBy
return \App\Work::find([12, 2, 3])->sortBy(function($el){
return array_search($el->getKey(), [12, 2, 3]);
}
關於getKey
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.