From 2aee6f8996d5bf790c73e58aaaef504774c53ffb Mon Sep 17 00:00:00 2001 From: weigang Date: Mon, 14 Sep 2020 18:57:39 +0800 Subject: [PATCH] =?UTF-8?q?=E5=95=86=E5=93=81=E8=BF=87=E6=BB=A4=E7=A9=BA?= =?UTF-8?q?=E5=95=86=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v3/GoodsRecommendController.php | 68 +++++++++++++++---- 1 file changed, 54 insertions(+), 14 deletions(-) diff --git a/app/Controller/v3/GoodsRecommendController.php b/app/Controller/v3/GoodsRecommendController.php index 2763cbc..f9ec2c6 100644 --- a/app/Controller/v3/GoodsRecommendController.php +++ b/app/Controller/v3/GoodsRecommendController.php @@ -2,10 +2,13 @@ namespace App\Controller\v3; +use App\Constants\v3\Store as StoreConstants; use App\Constants\v3\Tabs; use App\Controller\BaseController; use App\Model\v3\Goods; use App\Model\v3\GoodsCategory; +use App\Model\v3\Store; +use Hyperf\Utils\ApplicationContext; /** * 推荐商品相关 @@ -29,34 +32,51 @@ class GoodsRecommendController extends BaseController $page = $this->request->input('page', 1); $pagesize = $this->request->input('pagesize', 10); - $builder = Goods::query()->with('store') - ->where('market_id', $marketId) - ->where(function ($query) { - $query->where('inventory', '>', 0)->orWhere('is_infinite', '=', 1); + $storeTable = ApplicationContext::getContainer()->get(Store::class)->getTable(); + $goodsTable = ApplicationContext::getContainer()->get(Goods::class)->getTable(); + + $builder = Goods::query() + ->join($storeTable,''.$storeTable.'.id', '=', ''.$goodsTable.'.store_id') + ->where([ + ''.$storeTable.'.is_open' => StoreConstants::IS_OPEN_YES, + ''.$storeTable.'.status' => StoreConstants::STATUS_PASS, + ''.$storeTable.'.is_rest' => StoreConstants::IS_REST_NO + ]) + ->with(['store']) + ->where([''.$goodsTable.'.market_id' => $marketId]) + ->where(function ($query) use ($goodsTable) { + $query->where(''.$goodsTable.'.inventory', '>', 0)->orWhere(''.$goodsTable.'.is_infinite', '=', 1); }); + // $builder = Goods::query()->with('store') + // ->where('market_id', $marketId) + // ->where(function ($query) { + // $query->where('inventory', '>', 0)->orWhere('is_infinite', '=', 1); + // }); + switch ($tab) { case Tabs::APPLET_INDEX_RECOMMEND: - $builder = $builder->orderBy('sales', 'desc'); + $builder = $builder->orderBy(''.$goodsTable.'.sales', 'desc'); break; case Tabs::APPLET_INDEX_NEW: - $builder = $builder->orderBy('created_at', 'desc'); + $builder = $builder->orderBy(''.$goodsTable.'.created_at', 'desc'); break; case Tabs::APPLET_INDEX_FRESH: - $builder = $builder->orderBy('price', 'asc'); + $builder = $builder->orderBy(''.$goodsTable.'.price', 'asc'); break; case Tabs::APPLET_INDEX_OFFICE: $categoryIds = [97,98]; // 查询出三级分类 $goodsCategoryIds = GoodsCategory::query()->whereIn('category_id', $categoryIds)->pluck('id'); - $builder = $builder->where(function ($query) use ($categoryIds, $goodsCategoryIds) { - $query->whereIn('category_id', $categoryIds) - ->orWhereIn('goods_category_id', $goodsCategoryIds); + $builder = $builder->where(function ($query) use ($categoryIds, $goodsCategoryIds, $goodsTable) { + $query->whereIn(''.$goodsTable.'.category_id', $categoryIds) + ->orWhereIn(''.$goodsTable.'.goods_category_id', $goodsCategoryIds); }); break; } - $paginate = $builder->paginate($pagesize); + $builder->select(''.$goodsTable.'.*')->addSelect([''.$goodsTable.'.sales as total_sales']); + $paginate = $builder->groupBy(''.$goodsTable.'.id')->paginate($pagesize); $goods = $paginate->toArray(); return $this->success(['has_more_pages' => $paginate->hasMorePages(), 'tab_data' => $goods['data']]); @@ -75,15 +95,35 @@ class GoodsRecommendController extends BaseController public function getByTab() { $marketId = $this->request->input('market_id', 0); + + $storeTable = ApplicationContext::getContainer()->get(Store::class)->getTable(); + $goodsTable = ApplicationContext::getContainer()->get(Goods::class)->getTable(); + $goods = Goods::query() + ->join($storeTable,''.$storeTable.'.id', '=', ''.$goodsTable.'.store_id') + ->where([ + ''.$storeTable.'.is_open' => StoreConstants::IS_OPEN_YES, + ''.$storeTable.'.status' => StoreConstants::STATUS_PASS, + ''.$storeTable.'.is_rest' => StoreConstants::IS_REST_NO + ]) ->with(['store']) - ->where('market_id', $marketId) - ->where(function ($query) { - $query->where('inventory', '>', 0)->orWhere('is_infinite', '=', 1); + ->where([''.$goodsTable.'.market_id' => $marketId]) + ->where(function ($query) use ($goodsTable) { + $query->where(''.$goodsTable.'.inventory', '>', 0)->orWhere(''.$goodsTable.'.is_infinite', '=', 1); }) ->inRandomOrder() ->limit(20) ->get()->toArray(); + + // $goods = Goods::query() + // ->with(['store']) + // ->where('market_id', $marketId) + // ->where(function ($query) { + // $query->where('inventory', '>', 0)->orWhere('is_infinite', '=', 1); + // }) + // ->inRandomOrder() + // ->limit(20) + // ->get()->toArray(); return $this->success(['has_more_pages' => false, 'tab_data' => $goods]); }