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

Laravel 5.6如何获取当前认证用户所属的所有测验?

解决Laravel 5.6中获取当前认证用户所属测验的问题

看来你是因为没正确建立模型间的多对多关联,或者查询方式不对,才导致返回了所有测验。咱们一步步来搞定这个问题:

1. 先定义好模型的多对多关联

你的users和quizzes是多对多关系,中间表是user_quizzes,所以得在两个模型里把关联关系写清楚:

在User模型中添加关联

打开app/User.php,新增这个方法:

public function quizzes()
{
    // 第二个参数是中间表名,第三、四个参数分别是当前模型和关联模型的外键
    return $this->belongsToMany(Quiz::class, 'user_quizzes', 'user_id', 'quiz_id');
}

可选:在Quiz模型中添加反向关联

打开app/Quiz.php,可以加上反向关联(方便后续从测验维度查询关联用户):

public function users()
{
    return $this->belongsToMany(User::class, 'user_quizzes', 'quiz_id', 'user_id');
}

2. 用正确的方式查询当前用户的测验

别再直接用Quiz::all()或者Quiz::get()了(这肯定会返回所有测验),要通过当前认证用户的关联关系来获取:

// 获取当前登录的用户
$currentUser = auth()->user();

// 获取该用户的所有测验
$userQuizzes = $currentUser->quizzes;

// 如果需要加额外条件(比如排序、筛选),可以链式调用:
$userQuizzes = $currentUser->quizzes()
    ->orderBy('created_at', 'desc')
    ->where('is_published', true) // 示例:只返回已发布的测验
    ->get();

可能的排查要点

  • 检查user_quizzes表结构:确保user_id和quiz_id是正确的外键,分别关联users.id和quizzes.id
  • 确认关联方法里的中间表名和外键顺序:顺序搞反的话,关联会失效,要么返回空要么返回错误数据
  • 验证当前用户在user_quizzes表中是否有对应记录:如果没有,自然会返回空集合

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:23:21