2016-07-28 1 views
0

これは私のテーブルNewTheme_Commentです:スレッドコメント、PHP、laravel

id 
    parent_id 
    id_theme 
    user 
    text 
    upVotes 
    downVotes 

そして、これは私のコントローラである:

class Comments extends Controller { 

public function GenerateComments($id){ 
    $Comments = NewTheme_Comment::where('id_theme', $id)->paginate(5); 
    return view('comments', ['Comments'=>$Comments]); 
} 

Idをは(一般的なポストへのリンクです各投稿はコメントの異なるセクションを持つため)、ユーザのクリックで動的に、ユーザはコメントの( 'comments view')セクションにリダイレクトされます。

私は配列を持っていますコメントテーブルNewTheme_Commentの値が入力されていますが、私の問題は値を使ってスレッド化されたコメントセクションを作成する方法です。

@foreach ($Comments as $Comment) {{-- Comments threads --}} 

<div class="media"> 
    <div class="media-left"> 
    </div> 
    <div class="media-body"> 
    <p class="media-heading">{{ $Comment->text }}</p> 
    <p class="media-heading">{{ $Comment->user }}/{{ $Comment->created_at }} </p> 
    </div> 
</div> 


@endforeach {{-- Comments threads --}} 

最終結果:ので、私のビューのよう

は、(問題は、これは私が探していますことを、すべてのPARENT_IDではありません0に等しいようなどのコメントセクションを作ることです:

0 
1 
2 
3 
2 
1 
1 
0 
1 
0 

私の考えでは(PARENT_IDを持つ)のようなコメントをすることです:

0 
    1 
     2 
     3 
     2 
    1 
    1 
    0 
    1 
    0 

しかし、私は論理的にこのことを行う正しい方法を見つけることができないので、最終的には(スレッドのコメント部分のように)私の小さなWebアプリケーションのためにredditが使用するものと同じに見えるようになります。

私のアプローチが悪い場合は、これを解決するための他のより良い方法を高く評価します。

+0

* parent_id *でグループ化することができます。そして、それらは正しく構造化され、ネストされたものを出力できます。 – TheFallen

+0

so(0,1,1,2,2,2,2/0,1,1,2,2,2)のようにparent_idでグループ化する方法コメントツリーの最初のブランチと2番目のブランチ(2シングルスレッドコメント)? – DomainFlag

答えて

1

parent_idを持たないすべてのコメントをリストし、コメントを読み込んだときにそのコメントのいずれかにチャイルドコメントがあり、インデント付きのコメントがあるかどうかをチェックします。

+0

これは再帰によって行われますか? – DomainFlag

+0

再帰を使用して行うことができます、良いでしょう。 – Martin

1

これは多段階の解決策です。スレッド化されたコメントはネストされたセットの形式なので、lazychaser/laravel-nestedsetパッケージを使用することをお勧めします。あなたの現在のアプローチを継続したい場合はビューで次に

public function children(){ 
    return $this->hasMany('App\Models\Comment', 'parent_id'); //Change as per your application architecture 
} 

を次のように

ラウンド他の方法は、あなたがの子供たちのためにチェックすることができ、あなたのCommentモデルでchild機能を有することになります部分的なビューを再帰的に呼び出すことによって与えられたノード