У меня есть массив идентификаторов продуктов, с которыми мне нужно получить коллекцию моделей. Массив выглядит примерно так:
$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
.
Что делать, чтобы получить тот же порядок, что и в массиве?
Используйте функцию 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();