Laravel查询Course表指定userId记录后筛选对应id返回null如何解决
错误原因
pluck('id') 方法会从查询结果中提取所有id的数值,返回的是仅含id值的一维集合,集合元素没有id键名,后续调用where('id', $id)无法匹配到对应数据,因此返回null。
解决方案
- 方案1(最推荐,性能最优):直接合并两个查询条件,数据库层面一次性过滤出结果
$data = Course::where('userId', $userId)->where('id', $id)->first(); dd($data);
- 方案2(需要先获取全部userId匹配的记录再二次筛选时使用):不用pluck,先拿完整记录集合再过滤
// 先取出所有userId匹配的完整课程记录 $courses = Course::where('userId', $userId)->get(); // 再从集合中筛选id匹配的单条记录 $data = $courses->where('id', $id)->first(); dd($data);
- 方案3(仅需判断id是否属于对应用户的课程时使用):直接用集合的contains方法判断
$courseIdList = Course::where('userId', $userId)->pluck('id'); $idIsValid = $courseIdList->contains($id);
内容的提问来源于stack exchange,提问作者user17012865
相关产品推荐
相关产品推荐

