2016-10-24 4 views
1

リレーションを持つモデルをクエリしようとしています。Laravel:リレーションJSONモデル

私の方法:

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

出力:

[{"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":[]}] 

あなたが見ることができるように、ラベルの関係は空です。

今、私が代わりに、すべてのオフ単一のモデルを照会しようとしている:

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

新しい出力:

"{"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"}]}" 

そして、あなたが今見ることができるように、すべてが正常です。全関係が存在する。最初のクエリに問題はありますか?関係は大丈夫と思われる。

+1

あなたは( 'ラベル')と '::を使用している任意の理由'と ' - >同じ雄弁な文で( 'ラベル')'と? –

+0

おっと、そうですよ! ':: with( 'labels')'は古くなったデバッグテストでした。私は質問を編集しました。 –

+0

心配ありません。私はそれが本当に何かに影響するとは思わないが、確かに見るのは奇妙だった。 –

答えて

1

そしてもちろん、それは小さな問題でした。私は私のクエリにselect()を追加するのを忘れ)

。元のidは、join()によって上書きされています。そのため、メソッドは存在しないlabelGroupを照会しようとしました。

正しいクエリ:

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; 
    } 
関連する問題