* @created 2022-06-23 11:19:23 * @modified 2022-06-23 11:19:23 */ namespace Beike\Repositories; use Beike\Models\Product; use Beike\Shop\Http\Resources\ProductList; use Illuminate\Database\Eloquent\Builder; use Illuminate\Http\Resources\Json\AnonymousResourceCollection; class ProductRepo { /** * 获取产品详情 */ public static function getProductDetail($product) { if (is_int($product)) { $product = Product::query()->findOrFail($product); } $product->load('description', 'skus', 'master_sku'); return $product; } /** * 通过多个产品分类获取产品列表 * * @param $categoryIds * @return mixed */ public static function getProductsByCategories($categoryIds) { $products = self::getProductsByCategory($categoryIds); $items = $products->groupBy('category_id'); return $items; } /** * 通过单个产品分类获取产品列表 * * @param $categoryId * @return AnonymousResourceCollection */ public static function getProductsByCategory($categoryId): AnonymousResourceCollection { $builder = self::getProductsBuilder($categoryId); $products = $builder->get(); $items = ProductList::collection($products); return $items; } /** * 获取 Builder * @param $categoryId * @return Builder */ public static function getProductsBuilder($categoryId): Builder { if (is_int($categoryId)) { $categoryId[] = $categoryId; } $builder = Product::query() ->select(['products.*', 'pc.category_id']) ->with(['description', 'skus', 'master_sku']) ->join('product_categories as pc', 'products.id', '=', 'pc.product_id') ->join('categories as c', 'pc.category_id', '=', 'c.id') ->whereIn('c.id', $categoryId); return $builder; } }