Laravel Eloquent ORM where with foreach loop

时间:2017-01-05 17:28:53

标签: php laravel laravel-5 orm eloquent

以下是关系:

用户有很多技能,有一个连接表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);
     }
});

关于我做错了什么或者如何以不同方式执行此操作的任何想法?

1 个答案:

答案 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。