订单和子订单集合 - laravel 7(简单)
Order and Sub Order collection - laravel 7 (Simple)
假设我有一组用户 Users::all()
我想sort/order这样Users::all()->sort('created_at', 'DESC')
然后我想通过像 [1,5,3,9,4,8]
这样的数组对其进行子排序,所以可以这样调用 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();
});
我想你可以调用 orderBy()
两次。
$ids = [1,5,3,9,4,8];
$users = Users::all()
->orderBy('created_at', 'desc')
->orderBy($ids)
->get();
这是否回答了您的问题?
你可以像这样使用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
The whereIn method verifies that a given column's value is contained within the given array
所以我找到了解决办法。
$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();
假设我有一组用户 Users::all()
我想sort/order这样Users::all()->sort('created_at', 'DESC')
然后我想通过像 [1,5,3,9,4,8]
这样的数组对其进行子排序,所以可以这样调用 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();
});
我想你可以调用 orderBy()
两次。
$ids = [1,5,3,9,4,8];
$users = Users::all()
->orderBy('created_at', 'desc')
->orderBy($ids)
->get();
这是否回答了您的问题?
你可以像这样使用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
The whereIn method verifies that a given column's value is contained within the given array
所以我找到了解决办法。
$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();