Laravel多列多条件匹配查询用户技能数据问题
问题分析与解决方法
你的代码问题在于在同一个whereHas闭包里同时添加了skill_id=1和skill_id=2的条件,但单条user_skills记录不可能同时拥有两个不同的skill_id,这个查询逻辑本身矛盾,所以返回空结果。
要实现"用户同时拥有满足两个条件的技能",需要拆分为两个独立的whereHas查询,每个whereHas分别检查用户是否拥有符合对应技能要求的记录。
正确代码示例
$min = 1; $max = 5; $skillId = 1; $min2 = 3; $skillId2 = 2; $searchQuery = $searchQuery // 检查用户拥有skill_id=1且经验在1-5之间的技能 ->whereHas('getSkill', function ($query) use ($min, $max, $skillId) { $query->where('skill_id', $skillId) ->whereBetween('experience', [$min, $max]); }) // 检查用户拥有skill_id=2且经验>3的技能 ->whereHas('getSkill', function ($query) use ($min2, $skillId2) { $query->where('skill_id', $skillId2) ->where('experience', '>', $min2); });
代码说明
- 第一个
whereHas:筛选出拥有skill_id=1且经验在1-5区间的用户 - 第二个
whereHas:在上一步的基础上,进一步筛选出同时拥有skill_id=2且经验大于3的用户 - 两个
whereHas组合后,就能得到同时满足两个技能条件的用户(也就是示例中的用户A)
内容的提问来源于stack exchange,提问作者pantech123
相关产品推荐
相关产品推荐

