2017-12-06 2 views
0

Ich bin ein Code wie folgt zu schreiben: -Mit whereRaw() und orWhereRaw() mit Join in Laravel 5.2

$results = User::select('users.id','users.user_type','users.status','homechef_details.user_id','homechef_details.address1','homechef_details.name','homechef_details.updated_rating') 
     ->join('homechef_details', function($query) use ($rating,$keyword) { 
      $query->on('users.id', '=', 'homechef_details.user_id'); 
      $query->where('users.status','=',1); 
      if(isset($rating) && !empty($rating)) 
      { 
       if(count($rating)==1) 
        $query->whereRaw('FLOOR(homechef_details.updated_rating) = '.$rating[0]); 
       else if(count($rating)>1) 
       { 
        $query->where(function($q) use($rating) 
        { 
         $q->whereRaw('FLOOR(homechef_details.updated_rating) = '.$rating[0]); 
         for($r = 1; $r < count($rating); $r++) 
         { 
          $q->orWhereRaw('FLOOR(homechef_details.updated_rating) = '.$rating[$r]); 
         } 
        }); 
       } 
      } 
     })->get(); 

Ich brauche den Boden Wert der Spalte Wert in der where-Klausel zu überprüfen. Ich erhalte diesen Fehler: -

Call to undefined method Illuminate\Database\Query\JoinClause::whereRaw() 

Wie kann ich diesen Fehler beheben?

Antwort

2

Es scheint, dass die JoinClause Klasse, kein Verfahren für rohe Abfragen habe ich schlage vor, Sie versuchen soemthing wie

$results = User::select('users.id','users.user_type','users.status','homechef_details.user_id','homechef_details.address1','homechef_details.name','homechef_details.updated_rating') 
     ->join('homechef_details','users.id', '=', 'homechef_details.user_id')->where('users.status','=',1); 
      if(isset($rating) && !empty($rating)) 
      { 
       if(count($rating)==1) 
        $results = $results->whereRaw('FLOOR(homechef_details.updated_rating) = '.$rating[0]); 
       else if(count($rating)>1) 
       { 
        $results = $results->where(function($q) use($rating) 
        { 
         $q->whereRaw('FLOOR(homechef_details.updated_rating) = '.$rating[0]); 
         for($r = 1; $r < count($rating); $r++) 
         { 
          $q->orWhereRaw('FLOOR(homechef_details.updated_rating) = '.$rating[$r]); 
         } 
        }); 
       } 
      } 
$results = $results->get(); 
+1

Vielen Dank. Das wirkte wie ein Zauber. :) – Saswat

1

Innenverschluss, $query ist Instanz von JoinClause und es hat nicht whereRaw() Methoden.

Als Alternative zur Antwort von madalinivascu können Sie DB::raw() verwenden, um Raw SQL innerhalb des Closures zu erstellen.