shared_posts
の多対多リレーションシップを作成します。https://laravel.com/docs/5.4/eloquent-relationships#many-to-many
これは未テストの例です。
public function sharedPosts()
{
//Probably can be shorter, look at the laravel docs.
return $this->belongsToMany('App\Post', 'post_shares', 'post_id', 'user_id');
}
これで、両方のポストモデルで2つのコレクションが作成されました。 1つはユーザーの投稿と1つのユーザーが投稿を共有したものです。その後、両方のコレクションをマージすることができます
$posts->merge($sharedPosts)->sortBy('created_at');
これについての唯一の問題は、あなたが共有1とものではありませんどのようなポスト言うことができないということです。しかし、これは次の関数
public function getAllPostsAttribute()
{
$posts = $this->posts()->selectRaw('"user_post" AS type')->get();
$sharedPosts = $this->sharedPosts()->selectRaw('"shared_post" AS type')->get();
return $posts->merge($sharedPosts)->sortBy('created_at');
}
で固定することが可能になりましたユーザーにallPosts
属性を呼び出すと、すべての記事や共有ポストを得ることができます。投稿のtype
属性で2を区別できます。
これは何もテストしていませんので、エラーがある場合はお知らせください。
もう1つの方法は、mysqlユニオンにすることができます。
laravelの 'eager loading'について読んでください。https://laravel.com/docs/5.4/eloquent-relationships#eager-loading –