2016-08-04 4 views
0

からモデルの配列を取得し、どのように私は、これらのオブジェクトの配列を得ることができますか?<code>Arrayable</code>ある雄弁<code>Models</code>の<code>Collection</code>、与えられたlaravelコレクション

コレクションで->toArray()を呼び出すと、ネストされた連想配列が返され、モデルが破棄されます。

私は配列にキャストした場合、私はこれは本当に奇妙なことを得る:

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

を次にこれがありますが、私は実際に(それが動作します)それを好きではないよ:

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

または、foreachループを使用して抽出することもできますが、それは醜いです。良い方法?

+0

'$ collection-> all()'を試してみませんか? – ceejayoz

+0

[each()](https://laravel.com/docs/5.2/collections#method-each)メソッドを試しましたか? –

答えて

2

Collectionは、標準配列を囲む単なるラッパーです。標準配列を取得するには、Collectionall()メソッドを呼び出します。

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

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

配列にキャストしようとしないでください。代わりにCollectionをそのまま保ち、必要な処理を行うにはmapまたはeachなどの高次関数を使用してください。

例:

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

$multiplied->all(); 

あなたは、これはちょうど緩い例from the docsあるので、あなたが実際のデータで何をする必要があるか指定しないでください。

アレイにキャストすることはできず、モデルをそのままにしておくと動作しません。

+0

"配列を取得してモデルをそのままにすることはできません。動作しません。それは間違っている。一連のモデルから一連のモデルを得ることは全く可能です。 – ceejayoz

+0

私はそれが私が言いたいことではないことを認識します。 –