2016-05-10 7 views
8

Laravel 5.2 hat ziemlich nett Helfer, würde Ich mag sie verwenden, um folgende Arten zu tun:Laravel 5.2 zupfen() mehrere Attribute von Eloquent Model Collection

I Eloquent Model Collection haben:

$lesson->users(); // returns Eloquent collection of 3 users 

pluck() Funktion wäre nützlich, aber es kann nur einzelne Parameter erhalten. Allerdings möchte ich Ausgabe mit zwei Parameter erhalten, id und name, wie folgt aus:

[ 
1=>['id'=>10,'name'=>'Michael Dook'], 
2=>['id'=>16,'name'=>'Henry Babcock'], 
3=>['id'=>19,'name'=>'Joe Nedd'] 
] 

Gibt es eine elegante Lösung für dieses?

Antwort

17

Ich weiß, dass dies nicht die letzte Frage ist, aber falls jemand stolpert auf es von Google später sehen die Only Collection Method

$lesson->users()->only("id", "name")->toArray(); sollte das sein, was du bist nach.

+1

In Laravel 5.2 führt dies entweder zu 'Aufruf zu undefinierter Methode Illuminate \ Database \ Query \ Builder :: only() 'Fehler beim Aufruf von' users() 'oder gibt leere Sammlung für' Benutzer' (ohne Klammern) – Paul

+0

Do you hast du schon eine Beziehung aufgebaut? Dies funktioniert in 5.2 gut, da ich es bereits in dieser Version getestet habe. – Blake

+0

Sind Sie sicher, dass Sie es in '5.2' getestet haben? Nach näherem Hinsehen funktioniert das nicht in '5.2.45' ...' Arr :: only' Methode, die sowohl 'Illuminate \ Support \ Collection' als auch' Illuminate \ Database \ Eloquent \ Collection' intern nur die oberste Ebene überprüft Schlüssel. Angenommen, 'users()' in dem Beispiel ist nur eine normale Methode und keine Beziehung, denn dann habe ich keine Ahnung was los ist :) – Paul

1

Try this:

$lesson->users()->select('id', 'name')->get()->toArray(); 
+0

Dies gilt nur für Laravel 4. In Laravel 5 erhalten Sie Integrität Integritätsbedingung Verletzung: Spalte in Feldliste ist mehrdeutig Laravel. – Fusion

+0

Dies führt eine neue Abfrage an die Datenbank durch und ist daher keine gewünschte Lösung, da er bereits eine Sammlung hat (vielleicht bereits im echten Code geändert/gefiltert). – MPS

+0

Sie werden auch Probleme mit den eingeschlossenen Werten bekommen, die eingefügt werden, und dann schlagen Versuche fehl, diese als Teil des Arrays zu konvertieren, wenn sie null sind. – Sam