2017-01-05 5 views
2

Hier sind die Beziehungen:Laravel Eloquent ORM whereHas mit einer foreach-Schleife

Ein Benutzer viele Fähigkeiten hat, gibt es eine Tabelle user_skills verbinden ist. Ich muss diese Tabelle durchsuchen, um die Profile zurückzugeben, die die besondere Fähigkeit haben. Dies ist Teil einer größeren Abfrage, die erstellt wird, deshalb gibt es hier kein -> get().

Benutzermodell

/** 
* A user may have many skills 
* 
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany 
*/ 
public function skills() 
{ 
    return $this->hasMany('App\Core\Platform\Models\UserSkill'); 
} 

Unten ist die Abfrage, die nicht das tut, was ich brauche es. Ich brauche es, um die Benutzer, die die bestimmte Fähigkeit haben, zurückzugeben, basierend auf der ID, die in der Suche übergeben wird (der Wert $ this-> misc ['search_skills']).

// Skills 
$this->user = $this->user->whereHas('skills', function ($q) 
{ 
    foreach ($this->misc['search_skills'] AS $skill) 
    {   
      $q->orWhere('id', $skill); 
    } 
}); 

Irgendwelche Gedanken darüber, was ich falsch mache oder wie ich das auf eine andere Weise ausführen könnte?

+0

ich denke, dass Sie whereIn (, 'skills' []) verwenden können, das wäre meine Methode des Angriffs –

Antwort

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); 
}); 

Immer wenn Sie am Ende orWhere mehrmals auf dem gleichen Feld verwenden, sollten Sie WhereIn wahrscheinlich verwenden.

Setzen Sie die Suchfähigkeiten in eine Variable ($ skills), importieren Sie diese Variable in Ihren Callback mit use und verwenden Sie whereIn.

Verwandte Themen