Laravel 5.6 Api - 搜索、排序和过滤数据列表

标签 laravel laravel-5 eloquent laravel-5.6 laravel-request

嗨,我正在开发一个用于检索分页用户列表的 rest api 端点。在前端,可以选择搜索所有列出的列、按所有列排序并按名称、状态和创建日期过滤。

到目前为止,我已经在用户模型中创建了一个存储库和本地范围,用于搜索、排序和过滤。到目前为止,这是我的代码。我对过滤器选项感到困惑。由于用户具有所有三个选项的调用过滤器。如何以最优化的方式在 api 中传递这些值?

Controller :

public function index(Request $request)
{
    $this->userRepository->getAllUsers($request);
}

存储库函数:
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)
}

型号:
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;
}

最佳答案

无论如何,我修复了它,我创建了另一个 post 端点,它将发送所有过滤器及其值。我不确定这是否是正确的方法,但现在我只能这样想。
更新
我已经按照以下教程实现了过滤器。
https://m.dotdev.co/writing-advanced-eloquent-search-query-filters-de8b6c2598db

关于Laravel 5.6 Api - 搜索、排序和过滤数据列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51555959/

相关文章:

php - 检查 POST 请求是否有字段留空的 Laravel 方法是什么?

javascript - 如何将数组发送到模式以在 Laravel 5.5 Blade 中使用 in_array 作为复选框来设置选中属性?

php - 基于 AND 而非 OR 查询 Laravel 多对多关系

php - 我如何获得通过与 Laravel 5/Eloquent 的两个多对多关系关联的不同类别列表?

php - Laravel 中的 SQL 语法有什么问题?

ajax - 验证后的Laravel Select2旧输入

php - Laravel 迁移重命名可为空的字段解决方法?

mysql - Laravel 5 - 查询生成器 AND

laravel - 在更新 Eloquent 模型时更新 redis 中的实体名称

mysql - 在 Laravel 中将 SQL 转换为 Eloquent 或其他数据库引擎