Laravel where on relationship object
The correct syntax to do this on your relations is:
Event::whereHas('participants', function ($query) { return $query->where('IDUser', '=', 1);})->get();
This will return Events where Participants have a user ID of 1. If the Participant doesn't have a user ID of 1, the Event will NOT be returned.
Read more at https://laravel.com/docs/5.8/eloquent-relationships#eager-loading
@Cermbo's answer is not related to this question. In that answer, Laravel
will give you all Events
if each Event
has 'participants'
with IdUser
of 1
.
But if you want to get all Events
with all 'participants'
provided that all 'participants'
have a IdUser
of 1, then you should do something like this :
Event::with(["participants" => function($q){ $q->where('participants.IdUser', '=', 1);}])
N.B:
In where
use your table name, not Model name.
With multiple joins, use something like this code:
$userId = 44;Event::with(["owner", "participants" => function($q) use($userId ){ $q->where('participants.IdUser', '=', 1); //$q->where('some other field', $userId );}])