2015-12-11 19 views
0

我的应用程序具有附加到Post对象的View对象(多对一)。用户对象有许多帖子。我如何检索本质上$totalViews = $user->posts()->views()->count();获取用户对象的所有Post对象上的总查看对象的数量

该语法显然不起作用。我可以遍历每个$ user->帖子并添加视图,但是这似乎很慢,并且可能有更好的方法。

+0

渴望加载呢? –

+0

@PeteHouston在循环每个帖子时会阻止n + 1查询,但它仍然需要遍历每个可能很慢的帖子。 –

+0

如果'$ user-> posts-> views-> count()'有任何错误吗? –

回答

1

我不知道如何用雄辩的关系做到这一点,但你可以分两步来完成。

$arrayOfIds = Post::where('user_id', $id)->get('id')->toArray(); 
$totalViews = View::whereIn('post_id', $arrayOfIds)->count(); 

这可能是我能想到的最简单的方法。

+0

感谢大家,现在可以使用。 –

+0

对于任何可能需要它的人,我会使用'$ posts = DB :: table('posts') - > where('user_id',1) - > lists('id');'获取数组因为这会返回一个整数数组而不是一个对象数组 –