Illuminate\Support\Collection を配列に変換する

経緯

Eloquent で取得したデータはそのままだと Object の Collection になっているのですが、配列として扱いたいケースが出てきました。そこで先の Collection を配列に変換するメモを残しておきます。

コード

$employeesCollectionObject = $dbConnect->table($this->table)
                    ->where(
                        [
                            ['id', '=', $id],
                        ]
                    )
                    ->select(
                        'employee_id',
                        'depart',
                    )
                    ->get();
$employeesCollectionArray = $employeesCollectionObject->map(function ($item, $key) {
    return [
        'tori_id' => $item->employee_id,
        'domain' => $item->depart,
    ];
});

例えばこうすることで、

object(Illuminate\Support\Collection)[xxx]
  protected 'items' => 
    array (size=10)
      0 => 
        object(stdClass)[yyy]
          public 'employee_id' => string '001' (length=3)
          public 'depart' => string 'sales' (length=5)
      1 => 
        object(stdClass)[zzz]
          public 'employee_id' => string '002' (length=3)
          public 'depart' => string 'accounting' (length=10)
      2 => 
      ...

このようなコレクション→オブジェクトの配列が

object(Illuminate\Support\Collection)[xxx]
  protected 'items' => 
    array (size=10)
      0 => 
        array (size=2)
          'employee_id' => string '001' (length=3)
          'depart' => string 'sales' (length=5)
      1 => 
        array (size=2)
          'employee_id' => string '002' (length=3)
          'depart' => string 'accounting' (length=10)
      ...

このようなコレクション→連想配列の配列になります。各プロパティへのアクセス等が犠牲になりますが、今回は織り込み済み。

さらに ->toArray() を使って

$employeesCollectionArray = $employeesCollectionObject->map(function ($item, $key) {
    return [
        'tori_id' => $item->employee_id,
        'domain' => $item->depart,
    ];
});
$customersArray = $employeesCollectionArray->toArray();

こうすることで

array (size=10)
  0 => 
    array (size=2)
      'employee_id' => string '001' (length=3)
      'depart' => string 'sales' (length=5)
  1 => 
    array (size=2)
      'employee_id' => string '002' (length=3)
      'depart' => string 'accounting' (length=10)
  ...

配列→連想配列にできました。

今回はこれで対応。

参考

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。