@romaaa32

Как выполнить сортировку запроса по порядку в массиве с использованием пагинации?

Есть массив с id, например:
$ids = [2, 1, 3];

Выполняю запрос:
$data = Test::whereIn('id', $ids)->paginate(5);

Результат запроса идет по возрастанию поля 'id' (1, 2, 3), как получить в том же порядке как указано в массиве 2, 1,3?
  • Вопрос задан
  • 108 просмотров
Решения вопроса 1
beliyadm
@beliyadm
because open source matters
ORDER BY FIELD(`id`, 2,1,3)
Сортировка в указанном порядке
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
delphinpro
@delphinpro
frontend developer
Добавить в таблицу поле для сортировки, например, sort_index

id | sort_index
---|-----------
 1 | 2
 2 | 1
 3 | 3


Потом сортировать по этому полю

$data = Test::whereIn('id', $ids)
            ->orderBy('sort_index')
            ->paginate(5);
Ответ написан
@Akela_wolf
Extreme Programmer
Никак. SQL не может учитывать порядок аргументов в предикате IN.
Да и то что вы получаете ответ по возрастанию - этого стандарт тоже не гарантирует (и, положим, PostgreSQL может возвращать строки в произвольном порядке, который зависит от того как они сохранены внутри БД)
Единственный способ задать порядок строк в выборке - использовать предложение ORDER BY, то есть явно определить порядок возвращаемых строк.

Вообще напоминает "проблему XY", поэтому давайте вы расскажете откуда вообще возникло такое желание, чего вы пытаетесь этим добиться.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы