爲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個系列的兩個模型。一個與用戶帖子和一個與用戶共享帖子。然後你可以合併這兩個集合:
$posts->merge($sharedPosts)->sortBy('created_at');
唯一的問題是,你不能告訴哪些帖子是共享的,什麼不是。但是,這可以通過以下功能
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
屬性,並得到所有帖子和分享的職位是固定的。您可以在帖子後區分2的type
屬性。
我還沒有測試過任何東西,所以請讓我知道是否有錯誤。
另一種方法可能是一個mysql聯盟。
閱讀laravel中的'eager loading' https://laravel.com/docs/5.4/eloquent-relationships#eager-loading –