Giải pháp:
$ids = array(1,17,2);
$ids_ordered = implode(',', $ids);
$items = static::whereIn('id', $ids)
->orderByRaw("FIELD(id, $ids_ordered)")
->get();
Ghi chú bổ sung:
Sử dụng giải pháp được tìm thấy trên một bài báo có tiêu đề Nhận tất cả các mục cùng một lúc theo thứ tự id hiện tại trong mệnh đề WHERE IN sử dụng Eloquent :
// Raw SQL:
// SELECT * FROM items WHERE id IN (1,2,3,4,5) ORDER BY FIELD(id,1,2,3,4,5);
$itemIds = array(1,2,3,4,5);
$ids = implode(',', $itemIds);
$items = static::whereIn('id', $itemIds)
->orderByRaw(DB::raw("FIELD(id, $ids)"))
->take($limit)
->get();