【发布时间】:2020-01-19 00:33:49
【问题描述】:
我的配置被阻止已经三天了。我无法按报告的模型排序,我尝试了很多方法但没有任何结论,例如 sortBy / sortByDesc,连接表但没有解决方案
我想执行分页、排序和服务器端过滤器。过滤器可以是多个。除了按相关模型排序外,一切正常
我得到网址: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
谢谢
【问题讨论】:
标签: javascript laravel sorting