2016-10-24 8 views
1

zurückgeben Ich versuche, ein Modell mit einer Beziehung abzufragen.Laravel: JSON-Modell mit Beziehung

Meine Methode:

public function getLabel($layerId) 
{ 

    $labelGroups = Forum_label_group:: 
     join('forum_layer_to_labels', function ($join) use ($layerId) { 
      $join->on('forum_layer_to_labels.layerId', '=', 'forum_label_groups.id'); 
     })->with('labels')->get()->toJson(); 

    return $labelGroups; 
} 

Der Ausgang:

[{"id":4,"name":"Demogruppe","description":"bla","required":1,"created_at":"2016-10-22 12:29:27","updated_at":"2016-10-22 12:29:27","labelGroupId":2,"layerId":2,"labels":[]},{"id":5,"name":"Demogruppe 2","description":"bla 2","required":0,"created_at":"2016-10-22 12:29:27","updated_at":"2016-10-22 12:29:27","labelGroupId":2,"layerId":3,"labels":[]}] 

Wie Sie sehen können, das Etikett Beziehung ist leer.

Jetzt versuche ich aus all stattdessen ein einziges Modell zur Abfrage:

public function getLabel($layerId) 
{ 
    return Forum_label_group::with('labels')->first()->toJson(); 
} 

die neue Ausgabe:

"{"id":2,"name":"Demogruppe","description":"bla","required":1,"created_at":"2016-10-22 12:29:27","updated_at":"2016-10-22 12:29:27","labels":[{"id":5,"title":"Demo rot","name":"demo-rot","typeId":3,"groupId":2,"created_at":"2016-10-22 12:29:47","updated_at":"2016-10-22 12:29:47"},{"id":6,"title":"Demoblau","name":"demoblau","typeId":1,"groupId":2,"created_at":"2016-10-22 12:30:03","updated_at":"2016-10-22 12:30:03"}]}" 

Und wie man jetzt sehen kann, ist alles in Ordnung. Die ganze Beziehung existiert. Gibt es ein Problem mit der ersten Abfrage? Die Beziehung scheint in Ordnung zu sein.

+1

Gibt es Gründe, die Sie verwenden ':: mit ('Labels')' und '-> mit ('Labels')' in der gleichen eloquent Aussage? –

+0

Whoops, du hast Recht! Das ':: with ('labels')' war ein veralteter Debugging-Test. Ich habe die Frage bearbeitet. –

+0

Keine Sorgen; Ich glaube nicht, dass es irgendetwas wirklich beeinflusst, aber es war sicher seltsam zu sehen. –

Antwort

1

Und natürlich war es ein kleines Problem;)

ich ein select() auf meiner Abfrage hinzuzufügen vergessen. Das Original id wurde von join() überschrieben. So versuchte die Methode, eine labelGroup abzufragen, die nicht existiert.

Die richtige Abfrage:

public function getLabel($layerId) 
    { 
     $labelGroups = Forum_label_group:: 
      join('forum_layer_to_labels', function ($join) use ($layerId) { 
       $join->on('forum_layer_to_labels.layerId', '=', 'forum_label_groups.id'); 
      })->select('forum_label_groups.*')->with('labels') 
      ->get(); 

     return $labelGroups; 
    }