后台商品管理
This commit is contained in:
parent
16be2c27eb
commit
c4d73d4185
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ class HomeController extends Controller
|
|||
public function index()
|
||||
{
|
||||
$data = [
|
||||
'category_products' => ProductRepo::getProductsByCategories([100002, 100003, 100004, 100005]),
|
||||
'category_products' => [],
|
||||
];
|
||||
|
||||
$html = '';
|
||||
|
|
|
|||
Loading…
Reference in New Issue