用户屏蔽用户该如何实现

用户屏蔽用户、或是屏蔽这个用户下面所有的帖子,该如何实现

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 16

我觉得这个应该交给前端渲染的时候去处理,不应该干涉后端的业务逻辑。

因为 api 请求数据,查询,这些应该都是通用的,不应该把 用户 屏蔽的 用户列表 加入查询条件,也不应该在查询后,再去过滤掉用户不想看的数据。

把屏蔽用户列表 id 传给前端,本地存储,每次渲染数据时过滤这些 id 的信息。

3年前 评论
保安 3年前
mostwin 3年前
MArtian (作者) 3年前

where uid not in (屏蔽的用户id),uid 字段加上索引。 很难吗:joy:

3年前 评论
Rache1 3年前
臭鼬 (楼主) 3年前
Rache1 3年前
人艰不拆 3年前
保安 3年前

用户量多了,帖子多了,按照常规的思路肯定有问题,暂时还没想到更好的方法 :joy:

3年前 评论
臭鼬 (楼主) 3年前
WadeYu (作者) 3年前
sanders

简单的看应该是全局作用域Global Scope的能力:用过滤关系的中间表作为条件,作用域里面写上这个筛选条件,既可以做到过滤。

        Schema::create('block_users', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->unsignedBigInteger('user_id')->comment('用户ID');
            $table->unsignedBigInteger('block_user_id')->comment('屏蔽用户ID');
            $table->timestamps();
        });

屏蔽帖子的话定义到这个模型屏蔽用户的关系

    public function blockUsers():BelongsTo
    {
        return  $this->belongsTo(BlockUser::class,'user_id', 'block_user_id');
    }

定义好全局作用域

class BlockUserRelationScope implements Scope
{
    protected $userId;

    public function __construct(int $userId)
    {
        $this->userId   = $userId;
    }

    public function apply(Builder $builder, Model $model)
    {
        $builder
            ->when(!empty($userId), function (Builder $builder) {
                $builder->whereDoesntHave('blockUsers', function (Builder $builder) {
                    $builder->where('user_id', $this->userId);
                });
            });
    }
}

然后在普通用户访问的中间件或控制器里面应用这个作用域

Post::addGlobalScope(new BlockUserRelationScope(auth()->id()));
3年前 评论
臭鼬 (楼主) 3年前

软删除 :joy:

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!