2015-03-30 11 views
7

Mam dużo problemów z konwersją następujących zapytań SQL do pracy z laravels query builder.Używanie wielu klauzul where przy użyciu konstruktora zapytań laravel

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' 

Ta kwerenda działa dobrze, ale nie mogę uzyskać takich samych wyników podczas korzystania z konstruktora kwerend Laravels. Mam następujący kod do tej pory. W ogóle nie działa poprawnie. Im myślę, że problem może leżeć z częścią orWhere, ponieważ wydaje się, że powracające wyniki, które nie pasują do innych klauzul, gdzie.

$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

jeśli jesteś zadowolony z mojej odpowiedzi poniżej, można go przyjąć :) –

Odpowiedz

12

Chcesz użyć advanced where z parametrem grupowania:

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