Zam*_*uuz 5 laravel eloquent laravel-5 laravel-request laravel-5.6
您好,我正在开发一个 Rest api 端点,用于检索分页的用户列表。在前端,有一些选项可以搜索所有列出的列、按所有列排序以及按名称、状态和创建日期进行过滤。
到目前为止,我已经在用户模型中创建了一个存储库和本地范围,用于搜索、排序和过滤。这是我到目前为止的代码。我对过滤器选项感到困惑。由于用户的呼叫过滤器具有所有三个选项。如何以最优化的方式在 api 中传递这些值?
控制器:
public function index(Request $request)
{
$this->userRepository->getAllUsers($request);
}
Run Code Online (Sandbox Code Playgroud)
存储库功能:
public function getAllUsers($request)
{
// Search Parameter
isset($request->q)? $q = $request->q: $q = null;
// Sort Parameter
if ( isset($request->sortby) && (isset($request->direction)) ) {
$sort[$request->sortby] = $request-> direction;
}
return User::where('type','=','student')
->ofSearch($q)
->ofSort($sort)
->paginate($per_page)
}
Run Code Online (Sandbox Code Playgroud)
模型:
public function scopeOfSearch($query, $q)
{
if ( $q ) {
$query->orWhere('name', 'LIKE', '%' . $q . '%')
->orWhere('school', 'LIKE', '%' . $q . '%')
->orWhere('email', 'LIKE', '%' . $q . '%')
->orWhere('phone', 'LIKE', '%' . $q . '%')
->orWhere('class', 'LIKE', '%' . $q . '%');
}
return $query;
}
public function scopeOfSort($query, $sort = [])
{
if ( ! empty($sort) ) {
foreach ( $sort as $column => $direction ) {
$query->orderBy($column, $direction);
}
}
else {
$query->orderBy('users.name');
}
return $query;
}
Run Code Online (Sandbox Code Playgroud)
无论如何,我修复了它,创建了另一个后端点,它将发送所有过滤器及其值。我不确定这是否是正确的方法,但现在我只能这样想。
更新
我按照以下教程实现了过滤器。
https://m.dotdev.co/writing-advanced-eloquent-search-query-filters-de8b6c2598db
| 归档时间: |
|
| 查看次数: |
25295 次 |
| 最近记录: |