2017-05-12 12 views
1

こんにちはStackOverflowのコミュニティは、私はlaravelで働いていると私はこのコレクションを作成し、私は今、私がしようとしていますシングルプランネストされたコレクションをフィルタリングする方法は?

を取得するために、本社との申し出スラグによってこのコレクションをフィルタリングする

$headquarters = collect([ 
     [ 
      'headquarter' => 'Leon', 
      'offers' => [ 
       [ 
        'name' => 'Name1', 
        'slug' => 'Name1' 
       ], [ 
        'name' => 'Name2', 
        'slug' => 'Name2' 
       ] 
      ] 
     ],[ 
      'headquarter' => 'Granada', 
      'offers' => [ 
       [ 
        'name' => 'Name3', 
        'slug' => 'Name3' 
       ],[ 
        'name' => 'Name4', 
        'slug' => 'Name4' 
       ],[ 
        'name' => 'Name5', 
        'slug' => 'Name5' 
       ] 
      ] 
     ] 
    ]); 

フィルタを使用する

$offer = $this->headquarters() 
     ->filter(function($hq) use ($headquarter, $slug) { 
      return $hq['headquarter'] == $headquarter && $hq['offers']['slug'] == $slug; 
     }); 

しかし、成功しません。何かアドバイス

答えて

2

あなたはすべてのオファー

foreach ($this->headquarters()->where('headquarter', 'Leon')[0]['offers'] as $offer) { 
      print_r($offer); 
     } 

$this->headquarters()->where('headquarter', 'Leon')[0]['offers'][0]; 

次に、このコードで特定の本社内のすべてのオファーを取得したり、このコードに用

$offer = collect($this->headquarters()->where('headquarter', $headquarter) 
          ->first()['offers']) 
        ->where('slug', $slug)->first(); 
+0

エンハンスドコードが追加されました –

+1

ありがとうございました。モハメッドは私がシングルを提供する必要があります。<またはこのコードセクションを試してください>それは私のために働いています – user615274

+0

あなたは私に正しい答えを与えることができますplz –

1

あなたの$ HQ [ '申し出']について

おかげで配列され、あなたは[ 'ナメクジ'] [0] [ '申し出'] $としてHQにアクセスする必要があります。

$offer = $this->headquarters() 
     ->filter(function($hq) use ($headquarter, $slug) { 
      return $hq['headquarter'] == $headquarter && in_array($slug, array_column($hq['offers'], 'slug')); 
     }); 
+0

おかげでクリスを試すことができますヘルプが、この場合私は単一のオファーを得る必要があります。 headquarterがGranadaで、スラッグがName3の場合、結果は['name' => 'Name3'、 'slug' => 'Name3']になります。 – user615274

関連する問題