2015-03-30 16 views
7

Ich habe eine Menge Probleme beim Konvertieren der folgenden SQL-Abfrage, um mit Larawels Query Builder zu arbeiten.Verwenden mehrerer where-Klauseln mit Laravel Query Builder

SELECT * FROM gifts 
JOIN giftcategory ON gifts.id = giftcategory.giftid 
JOIN giftoccasions ON gifts.id = giftoccasions.giftid 
JOIN giftrelationship ON gifts.id = giftrelationship.giftid 

WHERE (gifts.gender = 'any' OR gifts.gender = 'male') 
AND giftoccasions.occasionid = '2' 
AND (giftcategory.categoryid = '0' OR giftcategory.categoryid = '1') 
AND giftrelationship.relationshipid = '1' 

Diese Abfrage funktioniert gut, aber ich kann nicht die gleichen Ergebnisse erhalten, wenn Larawels Query Builder verwendet. Ich habe den folgenden Code bisher. Es funktioniert überhaupt nicht richtig. Ich denke, dass das Problem mit dem orWhere Teil liegen könnte, weil es scheint, Ergebnisse zurückzugeben, die keiner der anderen where-Klauseln entsprechen.

$giftQuery = DB::Table('gifts') 
->Join('giftcategory', 'gifts.id', '=', 'giftcategory.giftid') 
->Join('giftoccasions', 'gifts.id', '=', 'giftoccasions.giftid') 
->where('gifts.gender', '=', "male") 
->orwhere('gifts.gender', '=', "any") 
->where('giftoccasions.occasionid', '=', "2") 
->where('giftoccasions.relationshipid', '=', "1") 
->Where('giftcategory.categoryid', '=', "0") 
->orWhere('giftcategory.categoryid', '=', "1"); 
+0

, wenn Sie mit meiner Antwort unten zufrieden sind, können Sie es akzeptieren :) –

Antwort

12

Sie wollen advanced where mit Parametergruppierung verwenden:

$giftQuery = DB::table('gifts') 
    ->join('giftcategory', 'gifts.id', '=', 'giftcategory.giftid') 
    ->join('giftoccasions', 'gifts.id', '=', 'giftoccasions.giftid') 
    ->where(function($query) { 
     $query->where('gifts.gender', '=', "male") 
      ->orWhere('gifts.gender', '=', "any"); 
    }) 
    ->where('giftoccasions.occasionid', '=', "2") 
    ->where('giftoccasions.relationshipid', '=', "1") 
    ->where('giftcategory.categoryid', '=', "0") 
    ->orWhere('giftcategory.categoryid', '=', "1"); 
Verwandte Themen