[英]Laravel: Load posts with privacy only to subscriber
我有一個視圖,其中數據庫中的帖子已加載並顯示。 每個帖子都有用戶可以設置的隱私。 如果隱私為1,則任何人都可以查看該帖子。 如果隱私為2,則只有訂閱該用戶的用戶才能查看該帖子。
我如何僅將隱私2的帖子顯示給訂閱者而不顯示給任何人?
UserModel上的Helper類
public function isFollowed()
{
return $this->followers()
->where('follower_id', auth()->id())
->where('followers.active', 1)
->exists();
}
加載帖子
$posts = Post::with('comments', 'tags')->whereIn('posts.privacy', [1, 2])->where('posts.status', 1)->where('posts.archived', 0)->where('posts.type', '!=', 7)->latest()->paginate(15);
您只需要在約束內進行區分即可。 因為您還有其他一些約束,所以有必要將OR
聯接約束放在自己的where()
:
use Illuminate\Database\Eloquent\Builder;
$posts = Post::query()
->with('comments', 'tags')
->where('posts.status', 1)
->where('posts.archived', 0)
->where('posts.type', '!=', 7)
->where(function (Builder $query) {
$query>where('posts.privacy', 1)
->orWhere(function (Builder $query) {
$query->where('posts.privacy', 2)
->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('followers')
->whereColumn('followers.user_id', 'posts.user_id')
->where('followers.follower_id', auth()->id())
->where('followers.active', 1);
});
});
})
->latest()
->paginate(15);
我也不太清楚什么對你的第二列followers
表之外follower_id
,所以我估計user_id
。 這很可能需要更改。
順便說一句,您描述的內容聽起來更像是可見性,而不是隱私 。 如果我可以訂閱您(沒有您的限制和接受),卻突然看到您的更多內容,那么這幾乎不是隱私。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.