2017-09-19 6 views
0

私はLaravel 5.3を使用していると私はこのようにフォーマットのコレクションがあります。私はすべてのsub_categoriesアレイを抽出する必要がありますが、私はデータにアクセスする方法を見つけることができません抽出プロパティ配列

$categories = [ 
    { 
     "id":1, 
     "sub_categories":[ 
     { 
      "id":1, 
      "category_id":1 
     } 
     ] 
    }, 
    { 
     "id":7, 
     "sub_categories":[ 
     { 
      "id":5, 
      "category_id":7, 
     }, 
     { 
      "id":6, 
      "category_id":7 
     } 
     ] 
    } 
] 

をそのプロパティの中に。 $categoriesコレクションに基づいて、私はこのフォーマットで新しいものを作成するために期待している:

[ 
    { 
     "id":1, 
     "category_id":1 
    }, 
    { 
     "id":5, 
     "category_id":7 
    }, 
    { 
     "id":6, 
     "category_id":7 
    } 
] 

私は$categoriesマップPluckのを適用しようとしましたが、それはヌルで満たされた配列を取得します。

+0

'$ categories->( "sub_categories")を摘むようPluckのメソッドを呼び出す必要がありました - > flatten(1) 'それを行うかもしれない – apokryfos

+0

今度は、それは私にヌルでいっぱいの配列を与えます。 – levis

+1

私は摘み取ってみましたが、どのようにコレクションを取得しましたか? –

答えて

2

flatMapのように見えます。私は

$categories = collect((object) [ 
    [ 
     'id' => 1, 
     'sub_categories' => [ 
      [ 
       'id' => 1, 
       'category_id' => 1 
      ] 
     ] 
    ], 
    [ 
     'id' => 7, 
     'sub_categories' => [ 
      [ 
       'id' => 5, 
       'category_id' => 6 
      ], 
      [ 
       'id' => 6, 
       'category_id' => 7 
      ] 
     ] 
    ], 
]); 

dd($categories->flatMap(function($category) { 
    return $category['sub_categories']; 
})); 
+0

flatMap親指アップ! TBH私はそれを試したことはありません。それを知るには素晴らしい。 –

0

pluck方法は、トリックをした...それは私のために働いたものだ、ここでコールバックへの配列などの項目を返しますが、なぜわかりません。あなたが取得しようとしているプロパティがEloquent Relationships - Eager Loadingによって取得された場合、その関係の名前をpluckに渡す必要があります。私はこのようなDBからの私のコレクションを取得しています

Category::where('team_id', Auth::user()->current_team_id)->with('subCategories')->get()‌​; 

ので、私は$categories->pluck('subCategories');代わりの$categories->pluck('sub_categories');