我的 laravel 5.3 项目中有 3 个表,包括一个 pivot
工作
+----+----------------------+
| id | title |
+----+----------------------+
| 1 | PHP Developer |
| 2 | JavaScript Developer |
| 3 | UI Developer |
+----+----------------------+
技能
+----+-------+
| id | title |
+----+-------+
| 1 | PHP |
| 2 | js |
| 3 | CSS |
| 4 | HTML |
+----+-------+
job_skill(数据透视表)
+--------+----------+
| job_id | skill_id |
+--------+----------+
| 1 | 1 |
| 1 | 2 |
| 1 | 4 |
| 2 | 2 |
| 3 | 3 |
| 3 | 4 |
+--------+----------+
我在工作和技能模型中定义了 belongsToMany 关系。 现在,我需要匹配所有具有多种技能的工作。
例如
skills[]=php => [PHP Developer]
skills[]=js => [JavaScript Developer]
skills[]=HTML =>[PHP Developer, UI Developer]
skills[]=HTML,CSS => [UI Developer]
我在 Eloquent 中尝试使用 whereHas
,但由于我必须在技能之间使用 AND
,所以它什么也没有返回
$jobs = Post::whereHas('skills', function ($query) {
foreach($skills as $skill) {
$query->where('name', '=', $skill);
}
})->get();
请用 Eloquent 或 SQL 解决方案为我指明正确的方向
最佳答案
您可以使用 whereIn
子句来查找匹配的技能名称:
$searchSkills = ['PHP', 'CSS'];
Post::whereHas('skills', function($query) use ($searchSkills){
$query->whereIn('name', $searchSkills);
})->get();
...将返回所有至少包含一项名为 PHP
或 CSS
的技能的帖子。
此代码尚未经过测试。如果有效,请告诉我。
关于php - 如何使用 AND 条件在数据透视表中搜索多个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41281096/