2017-01-19 69 views
0

我有產品,屬性和類別。我想創建自定義屬性數組而不使用foreach。我知道我可以用foreach來完成,但我想用Eloquent查詢來完成。Laravel 5.3通過雄辯關係獲得自定義數組(對象)

這是我的表圖: Attributes tables diagram

我想創建數組(雄辯返回的Object)是這樣的:

$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

調用'指定者()'的子集? –

+0

不,不是這種情況。我想在上面的代碼中得到像這樣的數組hirarchy。 – Buglinjo

+0

對於'AttributeOption'我沒有在模式中看到'attribute_options'? –

回答

1

查詢Product型號有什麼具體原因嗎?如果這是沒有必要的,你的例子後陣只差你可以不喜歡它:

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

您可以訪問你想要什麼,通過集合(我服用,每次只是參考的第一項):

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

OR,如果你需要它,準確的格式可以映射的結果,如:

$results->keyBy('display_name')->map(function($attribute) { 
    return $attribute->attributeProperties 
     ->keyBy('display_name') 
     ->map(function($property) { 
      return $poperty->products_count; 
     }) 
     ->toArray(); 
}) 
->toArray();