Laravel DB::使用多个WHERE子句的原始查询

Laravel DB::使用多个WHERE子句的原始查询,laravel,laravel-5,eloquent,Laravel,Laravel 5,Eloquent,所以我有一个查询,我想添加一些额外的条件 查询: $providers = BusinessDetail::select( 'business_details.name as description', DB::raw('SUM(review_details.param_value) / COUNT(review_headers.id) AS avgUserReview') ) ->leftJoin('review_headers', 'business_details.

所以我有一个查询,我想添加一些额外的条件

查询:

$providers = BusinessDetail::select(
    'business_details.name as description', 
    DB::raw('SUM(review_details.param_value) / COUNT(review_headers.id) AS avgUserReview')
)
->leftJoin('review_headers', 'business_details.id', '=', 'review_headers.business_detail_id')
->leftJoin('review_details', 'review_headers.id', '=', 'review_details.review_header_id')
->leftJoin('rate_params', 'review_details.rate_param_id', '=', 'rate_params.id')
->groupBy('business_details.id')
->get();
我想将以下内容添加到查询DB::raw query
DB::raw('SUM(review_details.param_value)/COUNT(review_headers.id)AS avgUserReview')

->whereIn('rate_params.id', [1, 3, 4, 5])
->where('review_details.param_value', '<>', NULL)
->where('review_details.param_value', '<>', '')
->where('review_headers.review_status', '=', 1)
->其中('rate_params.id',[1,3,4,5])
->其中('review_details.param_value','',NULL)
->其中('review_details.param_value','','')
->其中('review_headers.review_status','=',1)
因此,查询将读取`'SUM(review_details.param_value)/COUNT(review_headers.id),其中四个where子句仅包含在其中

我该怎么办


有人吗?

您可以使用selectRaw来完成

刚刚添加到您的查询中:

->selectRaw('SUM(review_details.param_value) / COUNT(review_headers.id) AS avgUserReview')
->whereIn('rate_params.id', [1, 3, 4, 5])
->where('review_details.param_value', '<>', NULL)
->where('review_details.param_value', '<>', '')
->where('review_headers.review_status', '=', 1)
->selectRaw('SUM(review_details.param_value)/COUNT(review_headers.id)作为avgUserReview')
->其中('rate_params.id',[1,3,4,5])
->其中('review_details.param_value','',NULL)
->其中('review_details.param_value','','')
->其中('review_headers.review_status','=',1)
您可以使用两个selects方法或一个select Raw方法,并根据需要在其中提及任意多个列。正如@juancruzbarrios.job这样提到的

->selectRaw('SUM(review_details.param_value) / COUNT(review_headers.id) AS avgUserReview , business_details.name as description')->whereIn('rate_params.id', [1, 3, 4, 5])->whereNotNull('review_details.param_value')->where('review_headers.review_status', 1)

第二件事,你正在为一列编写两个where条件,可以缩短为

不太清楚…@TsaiKoga我如何将for where条件添加到
DB::raw('SUM(review_details.param_value)/COUNT(review_headers.id)AS avgUserReview')
?只需在后面添加它们即可leftjoin@TsaiKoga如果我把它们加在那里,他们会影响其他人。。。。我希望它们应用于
'SUM(review_details.param_value)/COUNT(review_headers.id)作为avgUserReview'
单独您没有
groupby
,在
SUM()/COUNT()
之后,它将成为一条记录,因此添加条件仍然是一条记录,您只需选择
description
avg
,不是真的知道会影响别人。但这会影响别人。。。包括
'business\u details.name as description',
是否只能指定
'SUM(review\u details.param\u value)/COUNT(review\u headers.id)作为avgUserReview'
?如果您不希望该条件应用于其余的选择,即WHERE条件只应应用于
'SUM(review\u details.param\u value)/COUNT(review_headers.id)仅作为avgUserReview'
,其余部分不作为。如果仍然不清楚,请使用DB::raw('select SUM(review_details.param_value)/COUNT(review_headers.id)作为avgUserReview from review_details where conditions'),将我ping聊天
->selectRaw('SUM(review_details.param_value) / COUNT(review_headers.id) AS avgUserReview , business_details.name as description')->whereIn('rate_params.id', [1, 3, 4, 5])->whereNotNull('review_details.param_value')->where('review_headers.review_status', 1)