diff --git a/beike/Shop/Http/Controllers/CategoryController.php b/beike/Shop/Http/Controllers/CategoryController.php index 38e4e1a6..f181fc45 100644 --- a/beike/Shop/Http/Controllers/CategoryController.php +++ b/beike/Shop/Http/Controllers/CategoryController.php @@ -3,25 +3,20 @@ namespace Beike\Shop\Http\Controllers; use Beike\Models\Category; -use Beike\Models\Product; -use Beike\Shop\Http\Resources\CategoryItem; -use Beike\Shop\Repositories\CategoryRepo; use Illuminate\Http\Request; +use Beike\Shop\Repositories\CategoryRepo; +use Beike\Shop\Repositories\ProductRepo; class CategoryController extends Controller { public function index(Request $request) { - $items = CategoryRepo::list(); - return CategoryItem::collection($items); + return CategoryRepo::list(); } public function show(Request $request, Category $category) { - $products = Product::query() - ->with('description') - ->latest() - ->paginate(); + $products = ProductRepo::getProductsBuilder($category)->paginate(); $data = [ 'category' => $category, diff --git a/beike/Shop/Repositories/ProductRepo.php b/beike/Shop/Repositories/ProductRepo.php index b0a17cee..21f25541 100644 --- a/beike/Shop/Repositories/ProductRepo.php +++ b/beike/Shop/Repositories/ProductRepo.php @@ -13,6 +13,7 @@ namespace Beike\Shop\Repositories; use Beike\Models\Product; use Beike\Shop\Http\Resources\ProductList; +use Illuminate\Database\Eloquent\Builder; class ProductRepo { @@ -37,19 +38,30 @@ class ProductRepo * @return array */ public static function getProductsByCategory($categoryId): array + { + $builder = self::getProductsBuilder($categoryId); + $products = $builder->get(); + $items = ProductList::collection($products)->jsonSerialize(); + return $items; + } + + + /** + * 获取 Builder + * @param $categoryId + * @return Builder + */ + public static function getProductsBuilder($categoryId): Builder { if (is_int($categoryId)) { $categoryId[] = $categoryId; } - $products = Product::query() + $builder = Product::query() ->select(['products.*', 'pc.category_id']) ->with(['description']) ->join('product_categories as pc', 'products.id', '=', 'pc.product_id') ->join('categories as c', 'pc.category_id', '=', 'c.id') - ->whereIn('c.id', $categoryId) - ->get(); - - $items = ProductList::collection($products)->jsonSerialize(); - return $items; + ->whereIn('c.id', $categoryId); + return $builder; } }