2016-08-04 8 views
0

Gegeben eine Collection von Eloquent Models, die Arrayable sind, wie bekomme ich ein Array dieser Objekte?Get Array von Modellen aus einer Laravel-Sammlung

Wenn ich ->toArray() auf der Sammlung aufrufen, gibt es mir ein verschachteltes assoziatives Array, die Modelle zu zerstören.

Wenn ich es auf ein Array geworfen, bekomme ich das wirklich Seltsame:

array:1 [▼ 
    "\x00*\x00items" => array:1 [▼ 
    "temp" => HistorySeries {#374 ▼ 
     #table: "history_series_hse" 
     #primaryKey: "id_hse" 
     #connection: "mysql" 
     +timestamps: false 
     <...snip...> 
    } 
    ] 
] 

Dann gibt es noch, aber ich bin gefallen es nicht wirklich (es funktioniert):

$reflection = new ReflectionClass($coll); 
    $property = $reflection->getProperty('items'); 
    $property->setAccessible(true); 
    $array = $property->getValue($coll); 

Oder ich könnte es mit einer foreach-Schleife extrahieren, aber das ist hässlich. Irgendein schöner Weg?

+0

Versuchen Sie '$ collection-> all()'? – ceejayoz

+0

Haben Sie [each()] (https://laravel.com/docs/5.2/collections#method-each) versucht? –

Antwort

2

Die Collection ist nur ein Wrapper um ein Standard-Array. Um dieses Standard-Array zu erhalten, rufen Sie die all()-Methode unter Collection auf.

// Collection of Item models 
$itemsCollection = Item::all(); 

// standard array of Item models 
$itemsArray = $itemsCollection->all(); 
-2

Versuchen Sie nicht, in ein Array zu konvertieren, sondern behalten Sie die Collection intakt und verwenden Sie Funktionen wie map oder each, um das zu tun, was Sie brauchen.

Ex:

$multiplied = $collection->map(function ($item, $key) { 
    return $item * 2; 
}); 

$multiplied->all(); 

Sie nicht angeben, was Sie wirklich mit den Daten tun müssen, damit diese from the docs nur ein loses Beispiel.

Sie können nicht in Array umwandeln und behalten das Modell intakt, es wird nicht funktionieren.

+0

"Sie können ein Array nicht erhalten und behalten das Modell intakt, es wird nicht funktionieren." Das ist falsch. Es ist durchaus möglich, eine Reihe von Modellen aus einer Sammlung von Modellen zu erhalten. – ceejayoz

+0

Ich weiß, dass ich das nicht sagen wollte. –