From 4d408c2d50ac348cfd97f99a6bae9e0cb0956658 Mon Sep 17 00:00:00 2001 From: Edward Yang Date: Thu, 23 Jun 2022 14:53:13 +0800 Subject: [PATCH] fixed product list --- beike/Admin/Repositories/CategoryRepo.php | 18 +++++++ .../Shop/Http/Controllers/HomeController.php | 2 + .../{CategoryItem.php => CategoryList.php} | 4 +- beike/Shop/Http/Resources/ProductList.php | 26 +++++++++ beike/Shop/Repositories/CategoryRepo.php | 38 ++----------- beike/Shop/Repositories/ProductRepo.php | 54 +++++++++++++++++++ 6 files changed, 105 insertions(+), 37 deletions(-) rename beike/Shop/Http/Resources/{CategoryItem.php => CategoryList.php} (86%) create mode 100644 beike/Shop/Http/Resources/ProductList.php create mode 100644 beike/Shop/Repositories/ProductRepo.php diff --git a/beike/Admin/Repositories/CategoryRepo.php b/beike/Admin/Repositories/CategoryRepo.php index f7564a47..bbffebaf 100644 --- a/beike/Admin/Repositories/CategoryRepo.php +++ b/beike/Admin/Repositories/CategoryRepo.php @@ -2,6 +2,7 @@ namespace Beike\Admin\Repositories; +use Beike\Models\Category; use Illuminate\Support\Facades\DB; class CategoryRepo @@ -18,4 +19,21 @@ class CategoryRepo return $results; } + + /** + * @param $categoryData + */ + public static function create($categoryData) + { + // Category::query()->create($categoryData); + $category = new Category(); + $category->parent_id = 12; + } + + public static function update(Category $category) + { + $category->update([ + + ]); + } } diff --git a/beike/Shop/Http/Controllers/HomeController.php b/beike/Shop/Http/Controllers/HomeController.php index d7893727..241e93a3 100644 --- a/beike/Shop/Http/Controllers/HomeController.php +++ b/beike/Shop/Http/Controllers/HomeController.php @@ -4,6 +4,7 @@ namespace Beike\Shop\Http\Controllers; use Beike\Models\Category; use Beike\Shop\Repositories\CategoryRepo; +use Beike\Shop\Repositories\ProductRepo; use Plugin\Guangda\Seller\Models\Product; class HomeController extends Controller @@ -12,6 +13,7 @@ class HomeController extends Controller { $data = [ 'categories' => CategoryRepo::getTwoLevelCategories(), + 'category_products' => ProductRepo::getProductsByCategories([100002,100003]), ]; return view('home', $data); diff --git a/beike/Shop/Http/Resources/CategoryItem.php b/beike/Shop/Http/Resources/CategoryList.php similarity index 86% rename from beike/Shop/Http/Resources/CategoryItem.php rename to beike/Shop/Http/Resources/CategoryList.php index cad33a21..0e14a795 100644 --- a/beike/Shop/Http/Resources/CategoryItem.php +++ b/beike/Shop/Http/Resources/CategoryList.php @@ -4,7 +4,7 @@ namespace Beike\Shop\Http\Resources; use Illuminate\Http\Resources\Json\JsonResource; -class CategoryItem extends JsonResource +class CategoryList extends JsonResource { /** * Transform the resource into an array. @@ -19,7 +19,7 @@ class CategoryItem extends JsonResource 'name' => $this->description->name ?? '', ]; - if ($this->children) { + if ($this->children->count() > 0) { $item['children'] = self::collection($this->children); } return $item; diff --git a/beike/Shop/Http/Resources/ProductList.php b/beike/Shop/Http/Resources/ProductList.php new file mode 100644 index 00000000..9033df94 --- /dev/null +++ b/beike/Shop/Http/Resources/ProductList.php @@ -0,0 +1,26 @@ + + * @created 2022-06-23 11:33:06 + * @modified 2022-06-23 11:33:06 + */ + +namespace Beike\Shop\Http\Resources; + +use Illuminate\Http\Resources\Json\JsonResource; + +class ProductList extends JsonResource +{ + public function toArray($request): array + { + return [ + 'id' => $this->id, + 'name' => $this->description->name ?? '', + 'category_id' => $this->category_id ?? null, + ]; + } +} diff --git a/beike/Shop/Repositories/CategoryRepo.php b/beike/Shop/Repositories/CategoryRepo.php index b41aed4b..8b12b13b 100644 --- a/beike/Shop/Repositories/CategoryRepo.php +++ b/beike/Shop/Repositories/CategoryRepo.php @@ -12,6 +12,7 @@ namespace Beike\Shop\Repositories; use Beike\Models\Category; +use Beike\Shop\Http\Resources\CategoryList; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; @@ -22,30 +23,14 @@ class CategoryRepo */ public static function getTwoLevelCategories() { - $items = []; $topCategories = Category::query() ->from('categories as c') ->with(['description', 'children.description']) ->where('parent_id', 0) ->get(); - foreach ($topCategories as $index => $topCategory) { - $items[$index] = [ - 'id' => $topCategory->id, - 'name' => $topCategory->description->name - ]; - $children = $topCategory->children; - if ($children->count() > 0) { - foreach ($children as $itemIndex => $item) { - $items[$index]['children'][$itemIndex] = [ - 'id' => $item->id, - 'name' => $item->description->name - ]; - } - } - } - - return $items; + $categoryList = CategoryList::collection($topCategories); + return json_decode($categoryList->toJson(), true); } @@ -65,23 +50,6 @@ class CategoryRepo return $builder->get(); } - /** - * @param $categoryData - */ - public static function create($categoryData) - { - // Category::query()->create($categoryData); - $category = new Category(); - $category->parent_id = 12; - } - - public static function update(Category $category) - { - $category->update([ - - ]); - } - public static function updateViewNumber() { diff --git a/beike/Shop/Repositories/ProductRepo.php b/beike/Shop/Repositories/ProductRepo.php new file mode 100644 index 00000000..68915d22 --- /dev/null +++ b/beike/Shop/Repositories/ProductRepo.php @@ -0,0 +1,54 @@ + + * @created 2022-06-23 11:19:23 + * @modified 2022-06-23 11:19:23 + */ + +namespace Beike\Shop\Repositories; + +use Beike\Models\Product; +use Beike\Shop\Http\Resources\ProductList; +use Illuminate\Support\Collection; + +class ProductRepo +{ + /** + * 通过多个产品分类获取产品列表 + * + * @param $categoryIds + * @return Collection + */ + public static function getProductsByCategories($categoryIds): Collection + { + $products = self::getProductsByCategory($categoryIds); + $items = collect($products)->groupBy('category_id'); + return $items; + } + + + /** + * 通过单个产品分类获取产品列表 + * + * @param $categoryId + * @return array + */ + public static function getProductsByCategory($categoryId): array + { + if (is_int($categoryId)) { + $categoryId[] = $categoryId; + } + $products = Product::query() + ->select(['products.*', 'pc.category_id']) + ->join('product_categories as pc', 'products.id', '=', 'pc.product_id') + ->join('categories as c', 'pc.category_id', '=', 'c.id') + ->whereIn('c.id', $categoryId) + ->get(); + + return ProductList::collection($products)->jsonSerialize(); + } +}