2015-09-29 105 views
0

我有一個查詢我的數據庫,我得到的所有配置文件超過 25,但我想過濾我的結果後再次查詢不同的參數。 例如,哪個配置文件是男性或女性,單身,戀愛,關係等。Laravel查詢後查詢

因爲我的結果有很多不同的查詢,我首先嚐試構建一個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

您可以使用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(); 
+0

感謝穆罕默德爲您的想法,但我有兩個不同的過濾器查詢,我認爲我的控制器和模型得到這個解決方案過載。 – ToyRobotic

+0

最後查詢生成器將執行相同的SQL查詢。使用範圍的好處是保持代碼的可讀性和組織性 –