2017-09-04 3 views
0

ich eine Sammlung, die diese ähnelt:Laravel Sammlung: Rückgabe nur Beziehung und Schlüssel

$a = Model::with(['sub' => function($q) { 
    $q->select('id', 'name') 
}])->get(); 

Dies gibt die folgende Auflistung: Artikel

{ 
    0: { 
     id: 0001, 
     name: "item 1", 
     type: "type a" 
     'sub' [ 
      { 
       'id': 10001, 
       'name': "sub Item 1" 
      }, 
      { 
       'id': 10002, 
       'name': "sub Item 2" 
      } 
     ] 
    }, 
    1: { 
     id: 0002, 
     name: "item 2", 
     type: "type a" 
     'sub' [ 
      { 
       'id': 11001, 
       'name': "sub Item 4" 
      }, 
      { 
       'id': 11002, 
       'name': "sub Item 5" 
      } 
     ] 
    } 

Was ich versuche zu tun, ist der Schlüssel der Eltern durch ihre IDs und nur die Beziehung zurückgeben. Zum Beispiel

{ 
    0001: { 
     'sub' [ 
      { 
       'id': 10001, 
       'name': "sub Item 1" 
      }, 
      { 
       'id': 10002, 
       'name': "sub Item 2" 
      } 
     ] 
    }, 
    0002: { 
     'sub' [ 
      { 
       'id': 11001, 
       'name': "sub Item 4" 
      }, 
      { 
       'id': 11002, 
       'name': "sub Item 5" 
      } 
     ] 
    } 

Ich kann nicht scheinen, dass dies funktioniert. Ich habe mit vielen Variationen versucht:

$a = Model::with(['sub' => function($q) { 
    $q->select('id', 'name') 
}])->pluck('sub', 'id'); 

Das funktioniert nicht als ‚Pluck‘ offensichtlich für eine Eigenschaft des übergeordneten Modells mit dem Namen ‚sub‘ sucht die Ausfahrt nicht. Gibt es einen Weg, dies zu erreichen?

Dank

Antwort

0

Sie fast da waren. Sie müssen ->get() vor dem pluck() tun.

$a = Model::with([ 
    'sub' => function ($q) { 
     $q->select('id', 'name'); 
    }, 
])->get()->pluck('sub', 'id'); 

Die pluck() in Ihrem Beispiel verwendet wird die Query Builder-Version von pluck anstatt die Sammlung Version.

Hoffe, das hilft!

+0

Diese Lösung behält nicht den Schlüssel "sub" in den Ergebnissen. In meiner aktuellen Situation ist dies jedoch kein Problem. Danke – Typhoon101

+0

@ Typhoon101 Welche Version von Laravel benutzt du? –

0

Verwendung keyBy Ihre pk als Array-Index zu verwenden.

Allerdings ignorieren andere Felder Sie wahrscheinlich each und filter. Wäre es nicht einfacher sein Sub::where(...) auszuwählen und dann Sammlung groupBy auf dem parent_id verwenden: https://laravel.com/docs/5.4/collections#method-groupby

So etwas wie Sub::where(...)->get()->groupBy('parent_id')

Verwandte Themen