2014-12-28 17 views
5

Ich habe 2 Tabellen, Benutzer und Fähigkeiten, und eine viele zu viele Beziehung zwischen ihnen. Pivot-Tabelle skill_user hat auch Spalte 'level' - auf welcher Ebene dieser Benutzer diese Fähigkeit kennt.Laravel viele zu viele Auswahl mit Eloquent

in User-Modell habe ich:

public function skills(){ 
    return $this->belongsToMany('Skill')->withPivot('level'); 
} 

und in Geschicklichkeit Modell:

public function users(){ 
    return $this->belongsToMany('User'); 
} 

Nun, ich brauche eine Abfrage auszuführen, die so etwas wie dies zurück:

„Select Alle Benutzer mit skill_id_1> 40 & & skill_id_2> 55 & & skill_id_3> 67 "

Dabei sind skill_ids unterschiedliche Skills, und jeder zurückgegebene Benutzer sollte alle Skills auf dem erforderlichen Level haben.

Ich suchte in Laravel Dokumentation und im Stackoverflow so viel wie ich konnte, konnte aber die Lösung nicht finden. Jede Hilfe wird geschätzt, danke!

+0

Sie wahrscheinlich besser erklären sollte. Welche Tabellen haben Sie und wie erhalten Sie skill_id_1? Es ist im Moment nicht sehr klar –

+0

skill_id_1 und skill_id_2 sind nur Variablen, es wird tatsächliche IDs geben, zum Beispiel: "Wähle alle Benutzer die php (mit id = 1) haben> 40 && mysql (id = 2)> 55" –

Antwort

5

Was Sie brauchen, ist whereHas. Mehrere von ihnen.

$users = User::whereHas('skills', function($q){ 
    $q->where('skill_id', 1); 
    $q->where('level', '>', 44); 
})->whereHas('skills', function($q){ 
    $q->where('skill_id', 2); 
    $q->where('level', '>', 55); 
})->whereHas('skills', function($q){ 
    $q->where('skill_id', 3); 
    $q->where('level', '>', 67); 
})->get(); 

ich die Werte gehe davon sind dynamisch, so sollte dies es viel vereinfachen:

$requirements = array('1' => 40, '2' => 55, '3' => 67); 

$users = User::query(); 
foreach($requirements as $id => $value){ 
    $users->whereHas('skills', function($q) use ($id, $value){ 
     $q->where('skill_id', $id); 
     $q->where('level', '>', $value); 
    }); 
} 
$users = $users->get(); 
+1

besser als ich gehofft hatte, danke! –

Verwandte Themen