2017-11-02 13 views
0

モデル「User」があり、各ユーザーには「Posts」があります。今ポストの異なるタイプがLaravel:1つのリレーション、複数のモデル

は、私はこのようなユーザーの全ての投稿を取得したいなど、「TextPostで」、「VideoPost」のような、あります

$user->posts()->get()

これは、の配列を返す必要があります正しいクラスを持つオブジェクトです。例えば、このような配列:

[App\VideoPost{}, App\TextPost{}]

私はドキュメントで説明したように多型の関係を使用しようとしましたが、それは動作しません。何か案は?

+1

'posts'テーブルの関係と内容を表示してください –

+0

いくつかのコードがすばらしいと思う –

+0

私はあなたがこれを探していると思いますhttps://laravel.com/docs/5.5/eloquent-relationships – Bomberis123

答えて

0

具体的な使用例については、実際にLaravelに関係タイプはありません。この場合、最も簡単なことは、各投稿の種類ごとに別々のhasMany関係を作成し、すべての結果の組み合わせを返す関数を作成することです。

つまり、あなたのUserクラスでは、このようなものに終わるだろう:

public function videoPosts() 
{ 
    return $this->hasMany(App\VideoPost::class); 
} 

public function textPosts() 
{ 
    return $this->hasMany(App\TextPost::class); 
} 

public function getPosts() 
{ 
    return $this->textPosts->concat($this->videoPosts); 
} 

それからちょうどあなたが追加することもでき、他のすべてのポストタイプのため、連結の呼び出しをチェーンに保つことができます。

関連する問題