Laravel如何查询job表中指定用户未申请的职位 现有SQL无法运行
问题排查
- 原有Laravel代码使用内连接
join,仅会返回两张表匹配的记录,无法查询到无对应申请记录的职位;同时判断空值使用where('字段', null)写法错误,应使用whereNull方法。 - 原有原生SQL将
user_id过滤条件写在WHERE子句中,左连接后无匹配申请记录的行对应的candidates字段均为NULL,会被该条件直接过滤,相当于左连接被强制转为内连接,无法得到正确结果。
正确实现代码
Laravel查询构造器版本
$joblist = JobDetail::leftJoin('candidates', function ($join) { $join->on('job_details.id', '=', 'candidates.job_detail_id') ->where('candidates.user_id', Auth::id()); }) ->whereNull('candidates.job_detail_id') ->get();
该写法将用户ID的过滤逻辑放在JOIN关联条件中,仅匹配当前登录用户的申请记录,最终筛选出关联结果为空的就是用户未申请的职位。
原生SQL版本
SELECT job_details.* FROM job_details LEFT JOIN candidates ON job_details.id = candidates.job_detail_id AND candidates.user_id = 替换为当前登录用户的实际ID WHERE candidates.job_detail_id IS NULL
内容的提问来源于stack exchange,提问作者Tharindu Perera
相关产品推荐
相关产品推荐

