我有两个表,users和user_skillsSchema Design。每个用户可以具有多个技能,其中存在与每个技能相关联的年数的经验。
用户
| 名称,名称|电邮|年龄| age |
| --|--|--| ------------ |
| 一个|一封@邮件|十五个| 15 |
| C类|电子邮件|十六个| 16 |
| D级|d@邮件|十七个| 17 |
user_skills
| 用户id|技能ID|体验| experience |
| --|--|--| ------------ |
| 一个|一个|三个| 3 |
| 一个|二个|五个| 5 |
| 二个|一个|二个| 2 |
| 三个|一个|五个| 5 |
| 三个|二个|二个| 2 |
我想获取经验值在1到5之间的技能1用户和经验值大于3的技能2用户。
我已经试过和很多人交往了,
$min=1;
$max=5;
$skillId=1;
$min2=3;
$max2='';
$skillId2=2;
$searchQuery=$searchQuery
->whereHas('getSkill', function ($query) use ($min, $max, $skillId, $min2, $max2, $skillId2) {
$query = $query->where('skill_id', $skillId);
if (!empty($max) && !empty($min)) {
$query=$query->whereBetween('experience', [$min, $max]);
} }
$query = $query->where('skill_id', $skillId2);
if (!empty($min2) && !empty($max2)) {
$query=$query->where('experience','>', $min2);
} }
);
字符串
这里getSkill
是我的关系有很多。该查询不会给予任何错误,但不会产生任何结果。如果我不使用第二个where clause
,我会得到结果。
1条答案
按热度按时间kmbjn2e31#
在同一个代码块中使用了两次$query变量。而不是单一的->whereHas你可以尝试以下。
字符串