Javascript Laravel:如何使用分页和;滤波器
我已经三天没有使用我的配置了。我不能按报告的模型进行排序,我尝试了许多方法,但没有得出结论,例如,sortBy/sortByDesc、join table但没有解决方案 我想执行分页、排序和服务器端过滤器。过滤器可以是多个。除了按相关模型排序外,其他一切都正常工作 我得到网址:Javascript Laravel:如何使用分页和;滤波器,javascript,laravel,sorting,Javascript,Laravel,Sorting,我已经三天没有使用我的配置了。我不能按报告的模型进行排序,我尝试了许多方法,但没有得出结论,例如,sortBy/sortByDesc、join table但没有解决方案 我想执行分页、排序和服务器端过滤器。过滤器可以是多个。除了按相关模型排序外,其他一切都正常工作 我得到网址:http://127.0.0.1:8000/api/user/list?page=1&limit=30&sort=user__created_at&direction=desc&search__user__name=Jam
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\uuuuu model\uuuu 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);
}
}
下面是属于组的用户示例:
return response()->json([
'items' => Utils::pagination($request, new User(), [
'group',
], 'user')->paginate($limit)->toArray()
]);
如何在此配置中通过相关模型引入排序
例如,对于按组名排序,我得到URL&sort=group\uu name
谢谢你这看起来在拉雷维尔不容易做到。有人建议在Laravel中使用一种语法,但Taylor解决了这个问题
在所有其他资源上,我都能找到人,但这不容易与您更通用的方法相匹配
Laravel最近还引入了“子查询增强”,包括按子查询值排序(在上搜索“雄辩的子查询增强”),但我不知道如何使用它使按雄辩的关系值排序更容易
我认为您最好的选择是使用第三方软件包,例如Github问题中链接到的软件包。安装后,只需创建一个新的基本模型类,该类使用use-Fico7489\Laravel\EloquentJoin\Traits\EloquentJoin然后从模型继承该类
use Fico7489\Laravel\EloquentJoin\Traits\EloquentJoin;
use Illuminate\Database\Eloquent\Model;
abstract class BaseModel extends Model
{
use EloquentJoin;
然后,您将能够使用以下函数按关系进行排序:
$model->orderByJoin('<relationship>.<column>', $direction);
$model->orderByJoin('.',$direction);
上面的关系
值是您在模型上定义的关系的名称
请记住,orderByJoin
函数只支持BelongsTo
和有一个关系
要记住的另一点是,无论是Laravel还是Laravel eloquent join包都不能保护您免受列名称(或orderByJoin
函数中的方向值)中SQL注入的影响。Laravel建议您对列名使用白名单:
PDO不支持绑定列名。因此,您不应允许用户输入指定查询引用的列名,包括“order by”列等。如果必须允许用户选择要查询的特定列,请始终根据允许列的白名单验证列名
$model->orderByJoin('<relationship>.<column>', $direction);