2015-03-30 17 views
7

Có rất nhiều sự cố khi chuyển đổi truy vấn SQL sau đây để làm việc với trình tạo truy vấn laravels.Sử dụng nhiều mệnh đề với trình tạo truy vấn 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' 

Truy vấn này hoạt động tốt, nhưng tôi không thể nhận được kết quả tương tự khi sử dụng xây dựng truy vấn Laravels. Tôi có đoạn mã sau cho đến nay. Nó không hoạt động chính xác chút nào. Im nghĩ rằng vấn đề có thể nằm với phần orWhere vì nó dường như trả về kết quả không khớp với bất kỳ mệnh đề nào khác.

$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

nếu bạn hài lòng với câu trả lời của tôi dưới đây, bạn có thể chấp nhận nó :) –

Trả lời

12

Bạn muốn sử dụng advanced where với tham số nhóm:

$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"); 
Các vấn đề liên quan