Laravel DB :: необработанный запрос с использованием нескольких предложений WHERE - PullRequest
0 голосов
/ 26 февраля 2020

Итак, у меня есть запрос, к которому я бы хотел добавить некоторые дополнительные условия.

Запрос:

$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 запрос 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)

Так что запрос читает `'SUM (review_details.param_value) / COUNT (review_headers.id), где четыре предложения WHERE включены в это одно.

Как мне go об этом?

Кто-нибудь?

Ответы [ 2 ]

0 голосов
/ 27 февраля 2020
->selectRaw('SUM(review_details.param_value) / COUNT(review_headers.id) AS avgUserReview')->select('business_details.name as description')->whereIn('rate_params.id', [1, 3, 4, 5])->whereNotNull('review_details.param_value')->where('review_headers.review_status', 1);

Вы можете использовать два метода выбора или один метод выбора «Сырой метод» и указать в нем столько столбцов, сколько вам нужно. как @ juancruzbarr ios .job упомянул это так

0 голосов
/ 26 февраля 2020

Вы можете использовать selectRaw для этого.

Документация selectRaw

Только что добавлено в ваш запрос raw:

->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)
...