在Laravel 8搜索查询中需要帮助



我正在做一个搜索查询。我的要求是

员工可以搜索多种语言和语言水平的求职者

例如:

员工输入

[
['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();

但是我对这个查询有点困惑。是否有其他的方法或可以重写这个查询与工作状态。

说到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();

相关内容

  • 没有找到相关文章

最新更新