環境
Laravel5.5
PHP7.2
MySQL5.7.23
前提・実現したいこと
ひとつの記事に対しコメントをすることが出来、そのコメントに返信が出来るような機能を開発しています。
まさにyoutubeのようなコメント欄を作りたいです。
コメントに返信をすると一段下がったような表示になり、一定数のコメントがたまるとreadmoreが出てくるようなイメージです。
DB構成
** Posts table**
|column|type|key|comment|
|:--|:--:|--:|
|post_id|int|PRIMARY KEY|記事ID
|post_body|text||記事本文
|post_user|string|uuid|ユーザー
|created_at|timestamp||投稿日時
** Comments table**
|column|type|key|comment|
|:--|:--:|--:|
|comment_id|int|RIMARY KEY|コメントID
|comment_body|text||コメント本文
|comment_user|string|uuid|ユーザー
|parent_podt|int|FOREIGN KEY : posts(post_id)|親記事
|parent_comment|int|nullable|親コメント
|created_at|timestamp||投稿日時
記事に対してのコメントだった場合はparent_comment = null
となります。
逆にコメントに対しての返信だった場合はparent_comment
にコメントIDが入ります。
ソースコード
php
1//uuidなどは省略 2$comments[ 3['comment_id'=>1,'comment_body'=>'aaa','parent_post'=>1,'parent_comment'=>null], 4['comment_id'=>2,'comment_body'=>'bbb','parent_post'=>1,'parent_comment'=>null], 5['comment_id'=>3,'comment_body'=>'ccc','parent_post'=>1,'parent_comment'=>1], 6['comment_id'=>4,'comment_body'=>'ddd','parent_post'=>1,'parent_comment'=>1], 7] 8
これを表示しやすいように加工するにはどうしたらいいでしょうか?
$comments->groupBy('parent_comment')
を使ってみましたが、Viewでループを何度もまわさないと思ったように表示できませんでした。
php
1$comments=$comments->groupBy('parent_comment'); 2$comments[ 3 "" =>[ 4 ['comment_id'=>1,'comment_body'=>'aaa','parent_post'=>1,'parent_comment'=>null], 5 ['comment_id'=>2,'comment_body'=>'bbb','parent_post'=>1,'parent_comment'=>null], 6 ], 7 1 =>[ 8 ['comment_id'=>3,'comment_body'=>'ccc','parent_post'=>1,'parent_comment'=>1], 9 ['comment_id'=>4,'comment_body'=>'ddd','parent_post'=>1,'parent_comment'=>1], 10 ], 11] 12
あいまいな質問になっていると思いますが、youtubeみたいなのコメント欄をLaravelで作るにはどうしたらいいか教えてください。
よろしくお願いします。
余談
質問とは直接関係がなく申し訳ありませんが、ついでに質問させてください。
DBを作るときにvarchar 30などサイズを決めると思いますが、これは出来る限り指定したほうがいいのでしょうか?
参考となる記事などでも構いませんので、その理由も教えていただけると幸いです。
回答2件
あなたの回答
tips
プレビュー