2017-11-14 16 views
0

私はクエリ構築中にカスタムモデル関数内でメソッドを呼び出そうとしていますが、エラーが発生しています。これは可能です。実際にはクエリを中断しようとしていますfilterDataが長くなる可能性があるため、2つの関数があります。モデルでlaravel 5.4 where句の中でカスタムメソッドを使用することができます

は、私はあなたがより多くの関係の代わりに、生のDBクエリを使用する必要があり、この

public function get_filter_sql2($query, $filterData){ 

     if(count($filterData) > 0){ 

      foreach($filterData as $key=>$value){ 

       if($value!=''){ 

        if($key == 'title'){ 
         $query->where('b.title', 'LIKE', '%'.$value.'%'); 
        } 
        if($key == 'bannercatID'){ 
         $query->where('b.bannercatID', '=', $value); 
        } 
        if($key == 'status'){ 
         $query->where('b.status', '=', $value); 
        } 

       } 
      } 
     } 
     return $query; 
    } 



function scopeGet_all_records2($query,$filterData, $per_page){ 
     //DB::enableQueryLog(); 
     $result = DB::table('banner as b') 
       ->leftJoin('banner_category as bc', 'bc.bannercatID', '=', 'b.bannercatID')  
       ->select('*')   
       ->where(function ($query) use ($filterData){    
        $this->get_filter_sql2($query, $filterData); 
       })   
       ->orderBy('b.bannercatID', 'ASC') 
       ->paginate($per_page) 
       ; 
     //$result = DB::getQueryLog(); 
     //print_r($result); 
     if(count($result) > 0){ 
      $result = $result; 
     } 
     else{ 
      $result = false; 
     }  
     return $result;    

    } 
+0

共有したいエラーがありますか? – madalinivascu

+0

何か問題があるため、エラーが発生しました。あなたのエラーの詳細の詳細。 – Amarnasan

+0

実際にはコントローラのecho $ records-> isEmpty();空のレコードがあるときには1を返します。エラーを返すのはなぜですか? – user1987095

答えて

0

のように書きました。しかしそれはあなた次第です。最終的には、Eloquentでよりエレガントになります。

あなたの問題は、$queryの代わりに$thisを匿名機能で使用していることです。

->where(function ($query) use ($filterData){    
    $query->get_filter_sql2($query, $filterData); 
}) 
+0

実際にはコントローラのecho $ records-> isEmpty();空のレコードがあるときには1を返します。そうでなければ、エラーを出すのは私のコードが正常に動作していることです。 – user1987095

+0

'if(count($ result)> 0)'を 'if($ result-> count())これは適切なLaravelメソッドです。 – Trouble

関連する問題