订单和子订单集合 - 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();