Делаю API на Laravel.
Встала задача отдавать результаты частями (limit, offset) и с указанной сортировкой (direction, column).
Для пагинации через offset-limit использую
пакет, который позволяет мне вместо стандартной пагинации Model::paginate(), вызывать пагинацию Model::offsetPaginate(). Работает через get параметры, добавляет в json meta информацию о текущей пагинации, всё как нужно.
Осталось только добавить сортировку с похожими требованиями.
Понятное дело у моделей есть функция orderBy() и её нужно вызывать перед вызовом offsetPaginate(). Но есть две нерешенные проблемы:
1. У orderBy() нет значений по умолчанию.
2. orderBy() не проверяет переданное название поля (если такого поля в таблице нет, выдаст ошибку, а хотелось бы сортировать в этом случае по полю по умолчанию).
2. Информация о текущей сортировки не добавляется к json.
Думаю над такими вариантами решения:
1. Добавить к классу модели свою функцию customOrderBy() в которой добавить значения по умолчанию, если сортировка не указана в get.
2. Добавить в модель список разрешенных для сортировки полей и в customOrderBy() проверять переданное название поля.
3. В resource API добавить в функцию with информации о сортировке.
Что подскажите?