Laravel: как получить пользовательскую сортированную красноречивую коллекцию, используя метод whereIn

У меня есть массив идентификаторов продуктов, с которыми мне нужно получить коллекцию моделей. Массив выглядит примерно так:

$ids = array(9, 2, 16, 11, 8, 1, 18); 

Прямо сейчас, я использую следующую строку кода для получения коллекции.

 $products = Product::whereIn('id', $ids)->get(); 

Но он сортирует продукты против своих идентификаторов. таких как: 1, 2, 8, 9, 11, 16, 18 . Мне нужен тот же порядок, что и в массиве $ids т.е. 9, 2, 16, 11, 8, 1, 18 .

Что делать, чтобы получить тот же порядок, что и в массиве?

Solutions Collecting From Web of "Laravel: как получить пользовательскую сортированную красноречивую коллекцию, используя метод whereIn"

Используйте функцию Field() mysql (если вы используете базу данных mysql) с DB::raw() laravel что-то вроде

 $products = Product::whereIn('id', $ids) ->orderBy(DB::raw("FIELD(id,".join(',',$ids).")")) ->get(); 

Field() возвращает индексную позицию списка с разделителями-запятыми

Вот еще один способ сделать это.

 $ids = array(9, 2, 16, 11, 8, 1, 18); $products = User::whereIn('id', $ids)->orderByRaw('FIELD(id, '.implode(',', $ids).')')->get();