php 在 Laravel 查询构建器中使用多个 where 子句
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/29342028/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Using multiple where clauses with laravel query builder
提问by Dan Hastings
I'm having a lot of trouble converting the following SQL query to work with Laravel's query builder.
我在转换以下 SQL 查询以使用 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'
This query works fine, but I can't get the same results when using Laravel's query builder. I have the following code so far. It is not working correctly at all. I'm thinking the issue could lie with the orWhere
part because it seems to be returning results that don't match any of the other where clauses.
此查询工作正常,但在使用 Laravel 的查询构建器时我无法获得相同的结果。到目前为止,我有以下代码。它根本无法正常工作。我认为问题可能出在orWhere
部件上,因为它返回的结果似乎与任何其他 where 子句都不匹配。
$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");
回答by Limon Monte
You want to use advanced wherewith parameter grouping:
$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");