diff --git a/beike/Shop/Http/Controllers/ProductController.php b/beike/Shop/Http/Controllers/ProductController.php index 5a0e81c7..5574236a 100644 --- a/beike/Shop/Http/Controllers/ProductController.php +++ b/beike/Shop/Http/Controllers/ProductController.php @@ -20,6 +20,7 @@ class ProductController extends Controller { $relationIds = $product->relations->pluck('id')->toArray(); $product = ProductRepo::getProductDetail($product); + dd((new ProductDetail($product))->jsonSerialize()); $data = [ 'product' => (new ProductDetail($product))->jsonSerialize(), 'relations' => ProductRepo::getProductsByIds($relationIds)->jsonSerialize(), diff --git a/beike/Shop/Http/Resources/ProductDetail.php b/beike/Shop/Http/Resources/ProductDetail.php index 42239dd5..44914077 100644 --- a/beike/Shop/Http/Resources/ProductDetail.php +++ b/beike/Shop/Http/Resources/ProductDetail.php @@ -20,6 +20,17 @@ class ProductDetail extends JsonResource */ public function toArray($request): array { + $attributes = []; + foreach ($this->attributes as $ProductAttribute) { + if (!isset($attributes[$ProductAttribute->attribute->attribute_group_id]['attribute_group_name'])) { + $attributes[$ProductAttribute->attribute->attribute_group_id]['attribute_group_name'] = $ProductAttribute->attribute->attributeGroup->description->name; + } + $attributes[$ProductAttribute->attribute->attribute_group_id]['attributes'][] = [ + 'attribute' => $ProductAttribute->attribute->description->name, + 'attribute_value' => $ProductAttribute->attributeValue->description->name, + ]; + } + return [ 'id' => $this->id, 'name' => $this->description->name ?? '', @@ -36,12 +47,7 @@ class ProductDetail extends JsonResource 'thumb' => image_resize($image, 150, 150), ]; }, $this->images ?? []), - 'attributes' => $this->attributes->map(function ($attribute) { - return [ - 'attribute' => $attribute->attribute->description->name, - 'attribute_value' => $attribute->attributeValue->description->name, - ]; - })->toArray(), + 'attributes' => $attributes, 'category_id' => $this->category_id ?? null, 'variables' => $this->decodeVariables($this->variables), 'skus' => SkuDetail::collection($this->skus)->jsonSerialize(),