2017-02-23 106 views
0

我對laravel 5個新的,我是想增加多個作用域是這樣的:如何在laravel多個範圍添加到DB ::表5.4

$projects = DB::table('projects AS p')->select('p.project_name','c.name_country', 'p.date_project','s.name_status','p.rejected_date')      
        ->join('country AS c','c.id','=','p.id_country') 
        ->join('status AS s','s.id','=','p.id_status') 
        ->where('p.active','=','1'); 

$projects = $this->scopeCountry($projects , $country); 
$projects = $this->scopeStatus($projects , $status); 
$projects->get(); 
return view('search.ajax')->with('projects', $projects); 
} 
    public function scopeCountry($query, $country){ 
      return is_null($country) ? $query : $query->where('p.id_country','=',$country); 
     } 

public function scopeStatus($query, $status){ 
      return is_null($status) ? $query : $query->where('p.id_status','=',$status); 
     } 
} 

它給了我這個錯誤:在 ErrorException 26864233b0cd26a1055b66c2645628be451523fd.php線4:未定義的屬性:照亮\數據庫\的MySqlConnection :: $ PROJECT_NAME(查看:/home/vagrant/Code/projects/resources/views/search/ajax.blade.php)

我注意到,這個錯誤不會顯示出來,如果我像這樣修改它:

//$projects = $this->scopeStatus($status); 
//$projects->get(); 

然後我添加的get()函數中:

public function scopeCountry($query, $country){ 
       return is_null($country) ? $query->get() : $query->where('p.id_country','=',$country)->get(); 
      } 

爲什麼我沒有在一個範圍內添加查詢和我使用is_null($國家)的原因,是因爲在情況這些變量($國家,$狀態)爲空只應執行主查詢:

$projects = DB::table('projects AS p')->select('p.project_name','c.name_country', 'p.date_project','s.name_status','p.rejected_date')      
         ->join('country AS c','c.id','=','p.id_country') 
         ->join('status AS s','s.id','=','p.id_status') 
         ->where('p.active','=','1'); 

而且我也有類似的範圍添加到另一個領域,也許有另一種方式來做到這一點,我不是當然。謝謝。

回答

0

我只是發現了使用方法更簡單的解決方案:

$projects = DB::table('projects AS p')->select('p.project_name','c.name_country', 'p.date_project','s.name_status','p.rejected_date')      
         ->join('country AS c','c.id','=','p.id_country') 
         ->join('status AS s','s.id','=','p.id_status') 
         ->where('p.active','=','1') 
         ->when($country, function($query) use ($country){ 
          return $query->where('p.id_country','=',$country); 
         }) 
         ->when($status, function($query) use ($status){ 
          return $query->where('p.id_status','=',$status); 
         }); 

當$國家或$狀態變量不存在或爲空,它是什麼裏面的閉合不執行。