2017-08-29 154 views
2

我使用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

你必須使用雄辯關係.. –

回答

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

歡迎:)你應該標記爲答覆,通過點擊向下箭頭下的勾號按鈕。 –

0

這應該工作。請嘗試以下操作:

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

不幸的是,在關鍵用戶返回NULL爲「user」=> NULL –

+0

我錯過了連接。這工作 非常感謝 –

0

請這個嘗試 -

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

希望這能對你有幫助。