我正在做一个搜索查询。我的要求是
员工可以使用多种语言和不同级别的语言搜索求职者。
例如:
员工录入
[
['name'=>'English', 'level'=>'fluant']
]现在,我的要求是,每个求职者谁有英语的基本水平,高级和流利的语言水平被选中。
或者如果雇员进入
[
['name'=>'English', 'level'=>'advanced']
]然后,所有具有英语和基础及高级水平的求职者都会被选中。
如何用Laravel 8编写select查询?
我正在使用这个查询
$levels = LanguageSkills::where('language_id', $lang[2])->where(function($q) {
$q->where('level', 'like', '%basic%')
->orWhere('level', 'like', '%advanced%')
->orwhere('level', 'like', '%fluent%');
})->first();但我有点搞不懂这个查询。是否有其他方法或可以用工作状态重写此查询。
发布于 2022-07-19 12:44:12
当涉及到SQL时,我可能会做如下的事情
SELECT first_name
FROM language_skills
WHERE language_id = < id >
AND CASE
WHEN level = 'basic' THEN 0
WHEN level = 'advanced' THEN 1
WHEN level = 'fluent' THEN 2
END >= 1;要把它放到你的Laravel模型中,您可以创建雄辩的范围和某种"LanguageSkillLevelEnum“,以将您的价值观保存在一个地方。
public function scopeLvlAtLeast($query, $lvl)
{
return $query->whereRaw(<<<SQL
CASE
WHEN level = 'basic' THEN 0
WHEN level = 'advanced' THEN 1
WHEN level = 'fluent' THEN 2
END >= ?
SQL, $lvl);
}
public function scopeLvlAtMost($query, $lvl)
{
return $query->whereRaw(<<<SQL
CASE
WHEN level = 'basic' THEN 0
WHEN level = 'advanced' THEN 1
WHEN level = 'fluent' THEN 2
END <= ?
SQL, $lvl);
}(问号作为对SQL注入的保护。你可以读到更多关于它的这里)
那么要在您的示例中使用它,您应该
$levels = LanguageSkills::where('language_id', $lang[2])->lvlAtMost(1)->first();
$levels2 = LanguageSkills::where('language_id', $lang[2])->lvlAtLeast(2)->first();https://stackoverflow.com/questions/73035947
复制相似问题