以下是关系:
用户有很多技能,有一个连接表user_skills。我需要搜索此表以返回具有特定技能的配置文件。这是正在构建的更大查询的一部分,因此这就是为什么这里没有 - > get()。
用户模型
/**
* A user may have many skills
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function skills()
{
return $this->hasMany('App\Core\Platform\Models\UserSkill');
}
以下是没有按照我的需要进行操作的查询。我需要它根据搜索中传递的ID($ this-> misc ['search_skills']值)返回具有特定技能的用户。
// Skills
$this->user = $this->user->whereHas('skills', function ($q)
{
foreach ($this->misc['search_skills'] AS $skill)
{
$q->orWhere('id', $skill);
}
});
关于我做错了什么或者如何以不同方式执行此操作的任何想法?
答案 0 :(得分:2)
$skills = $this->misc['search_skills']; // assuming this is an array
$this->user = $this->user->whereHas('skills', function ($q) use ($skills)
{
$q->whereIn('id', $skills);
});
任何时候你最终在同一个领域使用orWhere多次,你应该最有可能使用whereIn。
将搜索技能放入变量($技能)中,使用use
将该变量导入回调,然后使用whereIn。