【问题标题】:Laravel how to get only relation dataLaravel如何仅获取关系数据
【发布时间】:2020-11-27 16:53:29
【问题描述】:

这是我的 User.php 关系代码

    public function activities()
    {
        return $this->hasMany(Activities::class, 'builder');
    }

这是我只获取关系数据的查询

return User::whereHas('activities', fn($query) => $query->where('user_id', 1))
            ->paginate();

但它只返回用户数据而不应用任何关系,并且它的分页不能使用pluck

我也试过了

User::where('username', request()->username)->has('activities')->paginate();

但我只需要获取关系数据而不是用户与关系,我更喜欢使用whereHas

【问题讨论】:

    标签: laravel relationship


    【解决方案1】:

    您需要为Activities 模型创建反向关系:

    class Activities extends Model
    {
        // ...
        public function user(): BelongsTo
        {
            return $this->belongsTo(User::class, 'user_id');
        }
    }
    

    并使用活动构建器获取所有活动:

    $paginated = Acitivities::query()
        ->whereHas('user', static function(Builder $userQuery) {
            $userQuery->where('name', request()->username); // Think about security!
        })
        ->paginate();
    

    注意:所有模型必须以单数命名(例如 Activity、User、Product 等)。

    【讨论】:

    • 谢谢它运行良好,顺便问一下安全问题是什么?你的意思是其他人可以访问其他用户的活动?
    • @Jackson 是的,但这取决于业务逻辑,也许某些用户无法访问其他用户活动。
    猜你喜欢
    • 1970-01-01
    • 2018-03-19
    • 2021-05-06
    • 2020-07-01
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    • 2020-11-07
    相关资源
    最近更新 更多