Laravel过滤'with'结果

时间:2015-01-19 10:56:02

标签: php laravel

我正在创建一个包含以下查询的网络应用程序:

$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也与当前登录的用户匹配。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

您只需添加一个闭包即可过滤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);

答案 1 :(得分:-1)

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

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

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

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