查询

时间:2015-09-29 09:21:35

标签: php laravel

ich在我的数据库上有一个查询,我得到所有已经结束的配置文件 25,但我想在此查询后使用不同的参数再次过滤我的结果。 例如哪个配置文件是男性还是女性,单身,恋爱,关系等。

因为我的结果有很多不同的查询,所以我首先尝试构建一个switch语句。 但随着时间的推移,这种情况正在增长,而且我认为它不是真正的优秀代码选择。 annonye可以帮助我更好地解决我的问题吗?

型号:

public static function getProfilesOverTweentyFive()
{
  return static::where(['age' > 25]);
}

控制器:

// Filtering the Result
public function filterList($key)
{
    switch($key)
    {
            case 'male':
                 return $filter = array('gender' , '=', 'male');
                 break;
            case 'female':
                 return $filter = array('gender' , '=', 'female');
                 break;
            case '10':
                 return $filter = array('looking', 'LIKE', '%Man%');
                 break;

            case '10':
                 return $filter = array('looking', 'LIKE', '%Women%');
                 break;

                 // etc 
          }         

       }        

         // Show the filtering Result       
         public function show()
         {
          $filter   = Input::get('filter');
          $column   = $this->filterList($filter)[0];
          $operator = $this->filterList($filter)[1];
          $key      = $this->filterList($filter)[2];

          $profileList = Profile::getProfilesOverTweentyFive()->where($column,$operator,$key)->paginate(15);
}

1 个答案:

答案 0 :(得分:2)

您可以使用query scopes在您的雄辩模型中为每个查询添加范围

public function scopeMale($query)
{
    return $query->where('gender', '=', 'male');
}
public function scopeOverTwentyFive($query)
{
    return $query->where('age', '>', 25);
}

然后在你的控制器中:

$users = App\User::male()->overTwentyFive()->get();