with(['images']) ->where('shop_supplier_id','in',[0,$shop_supplier_id]) ->order(['sort' => 'asc', 'create_time' => 'asc'])->select(); $all = !empty($data) ? $data->toArray() : []; $tree = []; foreach ($all as $first) { if ($first['parent_id'] != 0) continue; $twoTree = []; foreach ($all as $two) { if ($two['parent_id'] != $first['category_id']) continue; $threeTree = []; foreach ($all as $three) $three['parent_id'] == $two['category_id'] && $threeTree[$three['category_id']] = $three; !empty($threeTree) && $two['child'] = $threeTree; array_push($twoTree, $two); } if (!empty($twoTree)) { $temp_two_tree = array_column($twoTree, 'sort'); array_multisort($temp_two_tree, SORT_ASC, $twoTree); $first['child'] = $twoTree; } array_push($tree, $first); } Cache::tag('cache')->set('category_supplier_' .$shop_supplier_id, compact('all', 'tree')); } return Cache::get('category_supplier_' . $shop_supplier_id); } /** * 获取所有分类 */ public static function getSupplierCacheAll($shop_supplier_id) { return self::getSupplierALL($shop_supplier_id)['all']; } /** * 获取所有分类(树状结构) */ public static function getSupplierCacheTree($shop_supplier_id) { return self::getSupplierALL($shop_supplier_id)['tree']; } /** * 获取所有分类(树状结构) * @return string */ public static function getSupplierCacheTreeJson($shop_supplier_id) { return json_encode(static::getSupplierCacheTree($shop_supplier_id)); } /** * 获取所有一级分类 */ public static function getSupplierFirstCategory($shop_supplier_id) { return (new static())->where('parent_id', '=', 0) ->where('shop_supplier_id', '=', $shop_supplier_id) ->order(['sort' => 'asc', 'create_time' => 'asc']) ->select(); } /** * 添加新记录 */ public function add($data) { $data['app_id'] = self::$app_id; $this->deleteCache($data['shop_supplier_id']); return $this->save($data); } /** * 编辑记录 */ public function edit($data) { if ($this['shop_supplier_id']==0){ $this->error = '该分类为平台分类,不可以修改'; return false; } // 验证:一级分类如果存在子类,则不允许移动 if ($data['parent_id'] > 0 && static::hasSubCategory($this['category_id'])) { $this->error = '该分类下存在子分类,不可以移动'; return false; } $this->deleteCache($this['shop_supplier_id']); // !array_key_exists('image_id', $data) && $data['image_id'] = 0; return $this->save($data) !== false; } /** * 删除商品分类 */ public function remove($categoryId) { if ($this['shop_supplier_id']==0){ $this->error = '该分类为平台分类,不允许删除'; return false; } // 判断是否存在商品 if ($productCount = (new Product)->getProductTotal(['category_id' => $categoryId])) { $this->error = '该分类下存在' . $productCount . '个商品,不允许删除'; return false; } // 判断是否存在子分类 if (static::hasSubCategory($categoryId)) { $this->error = '该分类下存在子分类,请先删除'; return false; } $this->deleteCache($this['shop_supplier_id']); return $this->delete(); } /** * 删除缓存 */ private function deleteCache($shop_supplier_id) { Cache::delete('category_supplier_'.$shop_supplier_id); Cache::delete('category_all_' . static::$app_id); return Cache::delete('category_' . static::$app_id); } }