2017-01-19 17 views
0

私は商品、属性、カテゴリを持っています。 foreachを使わずにカスタム属性配列を作成したい。私はforeachでそれを行うことができることを知っていますが、私はEloquentクエリでそれをしたいです。Laravel 5.3 Eloquentの関係からカスタムArray(Object)を取得

これは私のテーブルの図である。 Attributes tables diagram

私はこのような配列(雄弁はオブジェクトを返さ)作成したい:

$attributes = [ 
     'attribute1' => [ 
      'attribute1_property1' => 'attribute1_property1_count_in_all_products', 
      'attribute1_property2' => 'attribute1_property2_count_in_all_products', 
      'attribute1_property3' => 'attribute1_property3_count_in_all_products', 
     ], 
     'attribute2' => [ 
      'attribute2_property1' => 'attribute1_property1_count_in_all_products', 
      'attribute2_property2' => 'attribute1_property2_count_in_all_products', 
      'attribute2_property3' => 'attribute1_property3_count_in_all_products', 
     ], 
     ... 
    ] 

私はモデルProductAttributeAttributePropertyを持っています。上記のコードでは

Product::whereHas('categories', function ($q) use ($catId) { 
     $q->whereId($catId); 
    })->with('attributeProperties.attribute')->get(); 

私は製品とそれの属性オプションのリストを取得するが、私は属性オプションは、親属性によってグループ化され、その属性のオプションを持っていたどのように多くの製品にカウントすることを望みます。言い換えれば

は、私はすべてのattribute_optionsが親attributeによってグループ化され、attribute_optionこのcategoryに持っていることをどのように行う多くの製品数え取得したいです。前もって感謝します。

+0

コール 'のtoArray()':あなたはその正確な形式でそれを必要とする場合

$attribute = $results->first(); $attributeProperty = $attribute->attributeProperties->first(); $attributeProperty->products_count; 

OR次のような結果をマッピングすることができますか? –

+0

いいえそうではありません。私は上記のコードのような配列hirarchyを取得したい。 – Buglinjo

+0

'AttributeOption'については、スキーマで' attribute_options'が表示されませんか? –

答えて

1

Productモデルを照会する特別な理由はありますか?それが必要とあなたは例の配列の後だけなられていない場合、あなたはそれが好き行うことができます。

$results = Attribute::with(['attributeProperties' => function($query) { 
    return $query->withCount('products'); 
}])->get(); 

あなたは(私は参照のための各の最初の項目を取っている)コレクションをあなたが欲しいものをアクセスすることができます。サブコレクションの

$results->keyBy('display_name')->map(function($attribute) { 
    return $attribute->attributeProperties 
     ->keyBy('display_name') 
     ->map(function($property) { 
      return $poperty->products_count; 
     }) 
     ->toArray(); 
}) 
->toArray(); 
関連する問題