簡體   English   中英

Laravel:僅向訂閱者加載具有隱私的帖子

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM