Laravel 筛选 'with' 结果

Laravel filtering the 'with' results

我正在制作一个包含如下查询的网络应用程序:

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

我想做的是按照以下方式添加一些内容:

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

所以我想获取属于该条目的评论,其中评论的 user_id 也与当前登录的用户匹配。有办法吗?

你也可以试试这个代码..

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

此代码将获取属于当前登录用户的 Entries 集合。

如果没有条目 Entries 集合计数将为零。如果存在一些条目,那么您可以遍历集合并获取条目属性。

您可以只添加一个闭包来过滤 with 结果:

$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);