首页 > 解决方案 > 雄辩的查询构建器搜索不特定于角色

问题描述

我想写一个查询,让具有特定角色的用户满足搜索要求。这是我的用户模型

用户.php

public static function agent_search($query)
{
    return empty($query) ? static::query()
        : static::where(function($q) use ($query) {
            $q->where('role', 'agent');
        })
            ->orWhere('first_name', 'like', '%'.$query.'%')
            ->orWhere('last_name', 'like', '%'.$query.'%')
            ->orWhere('phone_number', 'like', '%'.$query.'%')
            ->orWhere('email', 'like', '%'.$query.'%');
}

然后我像这样在我的控制器中调用它

 User::agent_search($this->search)->paginate(20),

结果是调用所有用户而不是具有该特定角色的用户。我该怎么办?

标签: laravel

解决方案


您可以使用本地范围:

public static function scopeAgentSearch($query,$search)
{
    if($search) {
        $query->where('role', 'agent')
            ->where(function($sub_q) use ($search) {
                $sub_q->where('first_name', 'like', '%'.$query.'%')
                ->orWhere('last_name', 'like', '%'.$query.'%')
                ->orWhere('phone_number', 'like', '%'.$query.'%')
                ->orWhere('email', 'like', '%'.$query.'%');
             });
   }

}

在控制器中:

 User::AgentSearch($this->search)->paginate(20);

推荐阅读