I was wondering how I could load all models of a type where a specific conditions is met.
Lets take the following example setup. I have 2 eloquent models, House
and Rental
. A House
has a hasMany
relationship to the Rental
.
public function rentals()
{
return $this->hasMany(Rental::class);
}
The Rental class has a review
column which can have the following values: positive
or negative
.
Now I'd like to "override" the default query builder which can be done using:
public function newQuery($excludeDeleted = true) {
return parent::newQuery($excludeDeleted);
}
Note: this does not change the default behaviour.
I'd like to know how I can change the default House
query to only return the House
instances which have at least any arbitrary number (x
) Rentals
with a review
equal to positive
.
So House::all()
should only return Houses
with at least x
positive
Rentals
.
Bonuspoints if you can also explain how to add another function which can be used to query all Houses
My question seems to have a lot in common with the softDeletes
trait of Laravel, softDeletes
models only query models where the deleted_at
column is non null. The bonus part of my question can be seen as the ::withTrashed()
option on a query.
The application is build on Laravel 5.4.
via milo526