好的,我有这三张桌子
users table:
id(int), name(varchar(20)), password(varchar(64)), created_at, updated_at
friends table:
id(int), targetID(int), ownerID(int), created_at, updated_at
posts table:
id(int), content(varchar(255)), ownerID(int), created_at, updated_at
我想查询用户自己以及他的朋友发布的帖子。
在这种情况下,userid为1,即John
Users table data
1, John, xxxx, xxxx, xxxx
2, Mary, xxxx, xxxx, xxxx
3, Micheal, xxxx, xxxx, xxxx
4, Rick, xxxx, xxxx, xxxx
5, Sarah, xxxx, xxxx, xxxx
Friends table data
1, 2, 1, xxxx, xxxx
1, 3, 1, xxxx, xxxx
1, 4, 1, xxxx, xxxx
Posts table data
1, "Hi everyone", 1, xxxx, xxxx
2, "Good Morning", 1, xxxx, xxxx
3, "Welcome to our site", 2, xxxx, xxxx
4, "Quite a few members", 3, xxxx, xxxx
5, "haha", 5, xxxx, xxxx
从上面的场景可以看出,我们的用户John是身为2,3,4的朋友,是Mary,Micheal和Rick。
我想查询结果,以显示John和他的朋友通过created_at升序发布的帖子。当然,会有内部联接与users表,以获取基于id的用户名。
我不确定Eloquent嵌套查询是如何工作的,因为我预计它会有whereor ownerid =多个用户,因为用户有很多可以发帖的朋友。
答案 0 :(得分:1)
没关系,我找到了答案,这里是未来的参考者。
$posts = Post::where('ownerID', function($query){
$query->select('targetID')
->from(with(new Friends)->getTable())
->where('ownerID', Auth::user()->id);
})
->orWhere('ownerID', Auth::user()->id)
->join('users', 'users.id', '=', 'posts.ownerID')
->orderBy('created_at', 'desc')
->get(array('posts.id', 'posts.content', 'users.name', 'posts.created_at'));