2016-12-15 13 views
1

メッセージごとにスレッドメッセージを取得したいMessage :: classがあります。私は再帰的にメッセージやLaravelと雄弁:: hasManyのを使用してメッセージなどなどのメッセージを取得することができますどのように再帰Eloquentモデル

これまでのところ私は、hasManyの()に再帰を設定しようとした

public function replys() 
{ 
    return $this->hasMany(Message::class, 'reply_to', 'id'); 
} 

public function replies() 
{ 
    $r = $this->replys; 
    if(count($r->get('replys')) > 0){ 
     foreach($r->get('replys') as $reply) { 
     $r->push(Message::create($reply)->replies()); 
     } 
    } 

    return $r; 
} 

しかし、私はマークを逃しているようだ。現時点では、ピボットテーブルとリファレンスbelongsToManyを使用できるかどうかを確認しようとしています。ヨーヨーは物事が進まどのようにお知らせします

+1

スレッドモデルを作成すると、各スレッドは多数のメッセージとメッセージを1つのスレッドに所属させることができます。 – tam5

+0

@tamも同じことを考えていました。私がピボットテーブルを作成して、自分のやり方で作業する必要があるのか​​どうか疑問に思っていたのですが、 'belongsToMany'を使ってバックワードをしばらく飛び出さなければなりませんでした。 – Kendall

答えて

0

研究は、このようにhasMany

を経由して再帰的なレコードを取得する方法を提案しているthis threadに私を導いた

public function replys() 
{ 
    return $this->hasMany(Message::class, 'reply_to', 'id'); 
} 

public function replies() 
{ 
    return $this->replys()->with('replies'); 
} 

が、それは私が期待していたが、これは簡単だろうとは思いませんでした 複雑な未加工のクエリステートメントを考案することなく、シンプルに保つことができました。

私の質問は、この再帰的な方法が大きなデータセットにどのように対応しているかです。