2016-07-22 16 views
0

ich folgendes Problem haben, ich habe zwei Modelle Stufe und Klasse: Stufe hat die Beziehung Klassen(), dann nach Level-Klassen erhalten:Änderung Beziehung Aufzeichnungen Laravel5.2

$level->classes 

die Daten zurückgegeben wie folgt aus: { "id": 1, "name": "Klasse 1" }, { "id": 2, "name": "Klasse 2" } jetzt will ich verwerfen Klasse 2, habe ich das versucht, aber es funktioniert nicht:

 $ids=[2]; 
     $classes=$level->classes; 

     $classes=$classes->whereIn('id',$ids); 

     $level->classes=$classes; 

Irgendwelche Vorschläge?

+0

Sie möchten den Datensatz löschen oder nur die Ergebnisse im $ IDs-Array zurückgeben? –

+0

Ich möchte die Ergebnisse in der $ IDs-Array –

+1

zurückgeben Ich denke, Sie brauchen möglicherweise eine '-> get()' auf dem 'WhereIn'. Es wäre hilfreich zu erklären, was "es nicht funktioniert" genau bedeutet. Was war das Problem? –

Antwort

1

Sie können möglicherweise eifrig laden, um zu erreichen, was Sie wollen. Wenn Sie nur eine Ebene möchten, müssen Sie auch nach dem ')' und vor der '-> get();'

https://laravel.com/docs/5.2/eloquent-relationships#eager-loading

$ids = [2]; 

$levels = Level::with(
    [ 
     'classes' => function ($query) use ($ids) { 
      $query->whereIn('id', $ids); 
     } 
    ] 
)->get(); 
+0

um genauer zu sein, ich habe viele Ebenen mit vielen Klassen für jede Ebene und dann habe ich die IDs für jede Ebene zu verwerfen? in meinem Fall funktioniert das nicht –

1

verwenden: $level->classes()->whereIn('id', $ids)->get().

Dadurch wird eine Instanz der Relation-Klasse zurückgegeben, die alle Methoden als normalen Abfrage-Generator enthält.