2017-01-05 181 views
2

這裏有關係:Laravel Eloquent ORM where有一個foreach循環

一個用戶有很多技能,有一個連接表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

我認爲你可以使用whereIn(,'skills'[])這將是我的攻擊方法 –

回答

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。

將搜索技巧放入一個變量($ skills)中,將該變量導入到您的回調函數use中,然後使用whereIn。