首页 > 解决方案 > Laravel如何仅获取关系数据

问题描述

这是我的 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

标签: laravelrelationship

解决方案


您需要为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 等)。


推荐阅读