Laravel过滤'with'结果

I'm making a web app which includes a query like the below:

$entry = Entry::with([
    'elements',
    'competition.groups.fields',
    'competition.groups.reviews'
])->find($id);

What I'd like to do is add something along the lines of:

$entry = Entry::with([
    'elements',
    'competition.groups.fields',
    'competition.groups.reviews' -> where('user_id', '=', Auth::user()->id)
])->find($id);

So I'd like to grab the reviews which belong to the entry, where the review's user_id also matches the currently logged in user. Is there a way of doing this?

You can just add a closure for filtering with results:

$entry = Entry::with([
    'elements',
    'competition.groups.fields',
    'competition.groups.reviews' => function($q){
        $q->where('user_id', '=', Auth::id()); // Replaced Auth::user()->id with a shortcut: Auth::id()
    }
])->find($id);

You can try this code too..

$entry = Entry::select('elements', 'competition.groups.fields', 'competition.groups.reviews')->where('user_id', '=', Auth::user()->id)->get();

This code will grab a collection of Entries which belong to the current user who is logged in.

If no entries present Entries collection count will be zero. If some entries exists, then you can loop through the collection and grab entries properties.