laravel |通过匹配多个列上的多个where条件来获取查询结果

yr9zkbsy  于 2023-03-09  发布在  其他
关注(0)|答案(1)|浏览(86)

我有两个表,usersuser_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,我会得到结果。

kmbjn2e3

kmbjn2e31#

在同一个代码块中使用了两次$query变量。而不是单一的->whereHas你可以尝试以下。

$searchQuery = $searchQuery
    ->whereHas('getSkill', function ($query) use ($min, $max, $skillId) {
        $query =  $query->where('skill_id', $skillId);
        if (!empty($max) && !empty($min)) {
            $query = $query->whereBetween('experience', [$min, $max]);
        }
    })
    ->whereHas('getSkill', function ($query) use ($min2, $skillId2) {
        $query =  $query->where('skill_id', $skillId2);
        if (!empty($min2)) {
            $query = $query->where('experience','>', $min2);
        }
    });

字符串

相关问题