首页 文章

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

提问于
浏览
2

嗨,我正在开发一个用于检索分页用户列表的rest api endpoints . 在前端,有选项可以搜索所有列出的列,按所有列排序并按名称,状态和创建日期进行筛选 .

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

Controller:

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

Repository function:

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)
}

Model:

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;
}

2 回答

  • 0

    我将以这种方式更改存储库的代码:

    public function getAllUsers($request)
    {
        // Set query builder
        $qb = User::query();
        if($request->has('q')){
            $qb->ofSearch($q);
        }
        if($request->has('sortby')){
            //Handle default parameter of get with second argument
            $qb->orderBy($request->get('sortBy'), $request->get('direction', 'ASC'));
        }
    
        return $qb->paginate();
    }
    

    Request :: get方法句柄isset检查给你!

  • 0

    无论如何我修复了我创建另一个post endpoints ,它会发送所有过滤器及其值 . 我不确定这是否是正确的方法,但现在我只能想到这样 .

    Update

    大家好,我按照下面的教程实现了过滤器 .

    https://m.dotdev.co/writing-advanced-eloquent-search-query-filters-de8b6c2598db

相关问题