Уже три дня я блокирую свою конфигурацию. Я не могу отсортировать по модели, о которой сообщалось, я пробовал много методов, но ничего неубедительного, например, sortBy / sortByDes c, таблица соединений, но нет решения
Я хочу выполнить подкачку, сортировку и серверные фильтры , Фильтров может быть несколько. Все работает, кроме сортировки по связанной модели. Я получаю URL: http://127.0.0.1:8000/api/user/list?page=1&limit=30&sort=user__created_at&direction=desc&search__user__name=James&search__group__name=Client
запрос search__model__col
позволяет мне объединить несколько запросов по нескольким моделям или столбцам
Вот мой код:
public static function pagination(Request $request, $model, $relation, $modelStringify)
{
$modelSortBy = explode('__', $request->query('sort'))[0]; // user
$tableSortBy = explode('__', $request->query('sort'))[1]; // created_at
$query = $request->query(); // ['page' => 1, 'limit' => 30...]
$direction = $request->query('direction'); // desc
try {
$model = $model->with($relation);
//TODO : orderBy relationship
if ($modelSortBy === $modelStringify): // modelStringify = 'user'
$model->orderBy($tableSortBy, $direction);
else:
// sort server side here
endif;
foreach (array_keys($query) as $q) {
if (strpos($q, 'search__') === 0) {
$modelSearchBy = explode('__', $q)[1]; // ['user', 'group']
$tableSearchBy = explode('__', $q)[2]; // ['name', 'name']
$valueSearchBy = $query[$q];
if ($modelSearchBy === $modelStringify):
$model->where($tableSearchBy, 'like', $valueSearchBy . '%');
else:
$model->whereHas($modelSearchBy, function (Builder $q) use ($valueSearchBy, $tableSearchBy) {
$q->where($tableSearchBy, 'like', $valueSearchBy . '%'); // $valueSearchBy = ['James', 'Client']
});
endif;
}
}
return $model;
} catch (Exception $e) {
return response()->json(['message' => $e], 400);
}
}
Вот пример для user
belongsTo
group
:
return response()->json([
'items' => Utils::pagination($request, new User(), [
'group',
], 'user')->paginate($limit)->toArray()
]);
Как я могу ввести сортировку по связанной модели в этой конфигурации?
Например, при сортировке по имени группы я получаю URL &sort=group__name
Спасибо