2014-12-06 55 views
0

好吧,我有这三个表Laravel雄辩:Whereor阵列连接

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 

我想查询自己用户的帖子,也是他的朋友。

在这种情况下,用户ID是1,它是约翰

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 

正如你可以从上面的场景中,我们看到用户,约翰是朋友ID 2,3,4这是玛丽,迈克尔和里克。

我要查询的结果出来,显示约翰和他的朋友为了通过created_at上升的帖子。当然,将会有用户表的内部连接来获取基于id的用户名。

我不确定如何雄辩的嵌套查询的作品,因为我期望它会有或ownerid =多个用户,因为用户有很多朋友谁可以发布帖子。

回答

0

它的好,我找到了答案,这里是未来referencers。

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