2017-02-23 5 views
0

に私はこのような倍数スコープを追加しようとしていた、laravel 5に新しい午前:どのようにDBに複数の範囲を追加する::テーブルlaravel 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()関数を追加:私は1つのスコープにクエリを追加しないと、私はIS_NULL($国)を使用する理由は、理由の場合である

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

これらの変数($国、$ステータス)がヌル本体のみのクエリを実行すべきだった。

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

$の国または$ status変数は、クロージャが実行されないの内側にそれが何であるか、存在またはnullではありません。

関連する問題