You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用whereHas查询关联数据:用户所属组的任务查询问题

问题解决:查询当前用户所在组的任务

你的代码返回空结果的核心原因是whereHas里的条件逻辑错误:你把group_id和用户ID做对比,而group_id是组的标识ID,和用户ID不属于同一维度,自然匹配不到任何数据。

下面是两种可行的修复方案:

方案一:利用模型关联查询

假设你的Group模型已经定义了和User的多对多关联(通过group_user中间表),Task模型定义了和Group的关联,可以这样写:

public function index()
{
    $userId = Auth::user()->id;

    return TaskResource::collection(
        Task::latest()
            ->whereHas('group', function($query) use($userId) {
                // 校验当前组是否包含当前用户
                $query->whereHas('users', function($subQuery) use($userId) {
                    $subQuery->where('users.id', $userId);
                });
            })
            ->get()
    );
}

必要的模型关联定义

确保你的模型里已经配置好关联:

  • Task模型:
public function group()
{
    return $this->belongsTo(Group::class);
}
  • Group模型:
public function users()
{
    return $this->belongsToMany(User::class, 'group_user');
}

方案二:先获取用户组ID再筛选任务

这种方式更直接,先从中间表拿到用户所属的所有组ID,再用whereIn筛选任务:

public function index()
{
    $userId = Auth::user()->id;

    // 获取当前用户加入的所有组ID
    $userGroupIds = DB::table('group_user')
        ->where('user_id', $userId)
        ->pluck('group_id');

    return TaskResource::collection(
        Task::latest()
            ->whereIn('group_id', $userGroupIds)
            ->get()
    );
}

两种方案都能实现需求,方案二更适合数据量较大的场景,性能更优。

内容的提问来源于stack exchange,提问作者Walid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 21:51:16