laravel雄辩嵌套SELECT语句

laravel雄辩嵌套SELECT语句

问题描述:

我使用Laravel与MySQL的雄辩。
我有三个表POSTS,USERSCOMMENTS。我POSTCOMMENT是一个一对多用下面的代码关系因此我获得评论特定POST IDlaravel雄辩嵌套SELECT语句

$post = Post::where('id', $id)->get(); 
$comment = Post::find($id)->comment()->paginate(10);  
return view('posts\single', ['post' => $post, 'comments' => $comment]); 

的名单现在我想从USER表中获取每个用户的详细信息。我不想使用foreach(),然后获取每个ID的详细信息。是否有任何方法可以在一次调用中获得所有评论(来自COMMENTS表),包括用户详细信息(来自USER表)。

+0

使用'JOIN'? https://www.w3schools.com/sql/sql_join.asp – Markinson

+0

你必须使用雄辩关系.. –

您首先需要在USERS中为COMMENTS创建一对多的关系(用户有很多评论)。

然后你已经有关系帖子有很多评论的关系。

所以,让我们使用嵌套预先加载

$post = Post::where('id', $id)->with('comments.user')->get(); 
return view('posts\single', ['post' => $post]); 
现在

在刀片文件....

  • $post->comments会给你某一职位的所有意见。
  • $post->comments->user会给你发表评论的用户。
+0

很好的解释!非常感谢Maulik。工作像魅力 –

+0

欢迎:)你应该标记为答复,通过点击向下箭头下的勾号按钮。 –

这应该工作。请尝试以下操作:

$comment = Comment::where('post_id', $post->id)->with('user')->paginate(10); 
+0

不幸的是,在关键用户返回NULL为“user”=> NULL –

+0

我错过了连接。这工作 非常感谢 –

请这个尝试 -

User::join('posts','posts.created_by','=','users.id') 
     ->with('comment') 
     ->where('posts.id' ,'=' ,$id) 
     ->paginate(10); 

希望这能对你有帮助。