Ich habe mehrere Anrufe zu whereHas()
auf einer Instanz von \Illuminate\Database\Query\Builder
($cars
):Mehrere whereHas Anrufe werden nicht aggregiert zusammen
$cars->whereHas("finance", function (Eloquent\Builder $query) {
$query->where('term'...)
}
$cars->whereHas("finance", function (Eloquent\Builder $query) {
$query->where('payment'...)
}
Gibt es eine Möglichkeit die where
(n) zusammen zu aggregieren, ohne zu benötigen tun alle where
Anrufe innerhalb der enthaltenen whereHas
?
Die SQL-Abfrage ausgeführt wird:
SELECT id
FROM `cars`
WHERE EXISTS
(SELECT `finance`.`payment` as payment
FROM `finance`
INNER JOIN `car_finance` ON `finance`.`id` = `car_finance`.`finance_id`
WHERE `car_finance`.`car_id` = `cars`.`id`
AND `payment` >= 50)
AND EXISTS
(SELECT *
FROM `finance`
INNER JOIN `car_finance` ON `finance`.`id` = `car_finance`.`finance_id`
WHERE `car_finance`.`car_id` = `cars`.`id`
AND `payment` <= 200)
AND EXISTS
(SELECT *
FROM `finance`
INNER JOIN `car_finance` ON `finance`.`id` = `car_finance`.`finance_id`
WHERE `car_finance`.`car_id` = `cars`.`id`
AND `term` = 48)
AND EXISTS
(SELECT *
FROM `finance`
INNER JOIN `car_finance` ON `finance`.`id` = `car_finance`.`finance_id`
WHERE `car_finance`.`car_id` = `cars`.`id`
AND `deposit` = 1000)
AND `active` = 1
Die SQL-Abfrage, die ich ausgeführt werden möchte:
SELECT *
FROM cars
WHERE EXISTS
(SELECT *
FROM `finance`
INNER JOIN `car_finance` ON `finance`.`id` = `car_finance`.`finance_id`
WHERE `car_finance`.`car_id` = `cars`.`id`
AND deposit = 1000
AND term = 48
AND payment >= 50
AND payment <= 200)
AND active = 1
Ich bin vor einer Weile in dieses Problem geraten und habe dieses Paket geschrieben, das das tut, wonach Sie suchen: https://github.com/Tucker-Eric/EloQuent Filter spezifischer [Filterung verwandter Modelle] (https://github.com/Tucker-Eric/EloquentFilter#ways-to-filter-related-models) –