假設我有一組用戶Users::all()
我想像這樣對它進行排序/排序Users::all()->sort('created_at', 'DESC')
然后我想通過一個像[1,5,3,9,4,8]這樣的陣列對其進行子排序 perhpas 這樣的呼叫Users::all()->sort('created_at', 'DESC')->sortBy("id", [1,5,3,9,4,8])
有什么建議嗎?
編輯 1
我發現了這個,這個使用正確嗎?
$ids = collect([1,5,3,9,4,8]);
$users = Users::all()->sort('created_at', 'DESC');
$users = $ids->map(function($id) use($users) {
return $users->where('cat_id', $id)->first();
});
uj5u.com熱心網友回復:
我認為你可以呼叫orderBy()兩次。
$ids = [1,5,3,9,4,8];
$users = Users::all()
->orderBy('created_at', 'desc')
->orderBy($ids)
->get();
這回答了你的問題了嗎?
uj5u.com熱心網友回復:
您可能可以whereIn這樣使用:
$ids = [1,5,3,9,4,8];
$users = Users::all()
->orderBy('created_at', 'desc')
->whereIn('cat_id', $ids)
->get();
https://laravel.com/docs/9.x/queries#additional-where-clauses
whereIn 方法驗證給定列的值是否包含在給定陣列中
uj5u.com熱心網友回復:
所以我找到了解決方案。
$ids = json_decode($interview->question_ids ?? '[]');
if(count($ids) == 0){ // if empty create new id array and save to DB
$ids = collect(questions::all()->where('interview_id', $interview->id)->pluck('id')->toArray());
$interview->question_ids = json_encode($ids);
$interview->save();
}
$questions = questions::all()->where('interview_id', $interview->id)->sortBy([
['order_timestamp', 'asc'],
['created_at', 'asc'],
]);
$questions = $ids->map(function($id) use($questions) {
return $questions->where('id', $id)->first();
});
$questions = $questions->flatten();
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/436661.html
下一篇:InteliJ書簽視窗不可見
