后台商品管理

This commit is contained in:
TL 2022-07-12 20:09:23 +08:00
parent 16be2c27eb
commit c4d73d4185
4 changed files with 48 additions and 65 deletions

View File

@ -8,6 +8,7 @@ use Beike\Models\Product;
use Beike\Models\ProductDescription;
use Beike\Models\ProductSku;
use Beike\Admin\Services\ProductService;
use Beike\Repositories\ProductRepo;
use Illuminate\Http\Request;
class ProductController extends Controller
@ -17,38 +18,7 @@ class ProductController extends Controller
public function index(Request $request)
{
if ($request->expectsJson()) {
$query = Product::query()
->select('products.*')
->with('description', 'skus');
if ($request->sku) {
$query->whereHas('skus', function ($q) {
$q->where('sku', 'like', '%'.request('sku').'%');
});
}
// 关键字搜索:名称
if ($request->keyword) {
$query->whereHas('description', function ($q) {
$q->where('name', 'like', '%'.request('keyword').'%');
});
}
$query->when($request->active !== null, function ($q) {
$q->where('active', (int)request('active'));
});
// 回收站
if ($request->trashed) {
$query->onlyTrashed();
}
// 排序
$orderBy = $request->order_by ?? 'products.id:desc';
$orderBy = explode(':', $orderBy);
$query->orderBy($orderBy[0], $orderBy[1] ?? 'desc');
$products = $query->paginate($request->per_page ?? 10);
$products = ProductRepo::list($request->all());
return ProductResource::collection($products);
}

View File

@ -32,50 +32,63 @@ class ProductRepo
/**
* 通过多个产品分类获取产品列表
*
* @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);
$builder = self::getBuilder(['category_id' => $categoryId]);
$products = $builder->get();
$items = ProductList::collection($products);
return $items;
}
/**
* 获取 Builder
* @param $categoryId
* @return Builder
*/
public static function getProductsBuilder($categoryId): Builder
public static function getBuilder($data = []) :Builder
{
if (is_int($categoryId)) {
$categoryId[] = $categoryId;
$builder = Product::query()->with('description', 'skus', 'master_sku');
if (isset($data['category_id'])) {
$builder->whereHas('categories', function ($query) use ($data) {
if (is_array($data['category_id'])) {
$query->whereIn('category_id', $data['category_id']);
} else {
$query->where('category_id', $data['category_id']);
}
});
}
$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);
if (isset($data['sku']) || isset($data['model'])) {
$builder->whereHas('skus', function ($query) use ($data) {
if (isset($data['sku'])) {
$query->where('sku', 'like', "%{$data['sku']}%");
}
if (isset($data['model'])) {
$query->where('model', 'like', "%{$data['model']}%");
}
});
}
if (isset($data['model'])) {
$builder->whereHas('skus', function ($query) use ($data) {
$query->where('sku', 'like', "%{$data['sku']}%");
});
}
if (isset($data['name'])) {
$builder->whereHas('description', function ($query) use ($data) {
$query->where('name', 'like', "%{$data['name']}%");
});
}
if (isset($data['active'])) {
$builder->where('active', (int)$data['active']);
}
return $builder;
}
public static function list($data)
{
return self::getBuilder($data)->paginate($data['per_page'] ?? 20);
}
}

View File

@ -17,11 +17,11 @@ class CategoryController extends Controller
public function show(Request $request, Category $category)
{
$products = ProductRepo::getProductsBuilder($category)->paginate();
$products = ProductRepo::getProductsByCategory($category->id);
$data = [
'category' => $category,
'products' => ProductList::collection($products),
'products' => $products,
];
return view('category', $data);

View File

@ -9,7 +9,7 @@ class HomeController extends Controller
public function index()
{
$data = [
'category_products' => ProductRepo::getProductsByCategories([100002, 100003, 100004, 100005]),
'category_products' => [],
];
$html = '';