I have a model Foo that contains a hasMany relationship to Bar.
I have a query similar to the following:
$r = Foo::with(['bar' => function($query) {
$query->where('someProp', '=', 10);
})->get()
However, I want to only return the Foo object if item has a Bar object that satisfies the query.
I'm aware that you can do something like this:
$r = Foo::has('bar')
->with(['bar' => function($query) {
$query->where('someProp', '=', 10);
})->get();
But that checks if any bar items exists. Not if a bar item exists with someProp = 10
The closest I have got to a solution is this:
$r = Foo::has('bar')
->whereHas('bar', function ($query) {
$query->where('someProp', '=', 10);
})
->with(['bar' => function($query) {
$query->where('someProp', '=', 10);
})->get();
But it's clearly not a very nice solution and is probably quite inefficient as I am repeating queries.
How can I solve this issue?
via Yahya Uddin