hasOne('app\\common\\model\\file\\UploadFile', 'file_id', 'image_id'); } /** * 充值套餐详情 */ public static function detail($category_id) { return (new static())->find($category_id); } public function detailWithImage($where) { return $this->with(['image'])->where($where)->find(); } /** * 所有分类 */ public static function getALL() { $model = new static; if (!Cache::get('category_' . $model::$app_id)) { $data = $model->with(['images'])->where(['shop_supplier_id'=>0])->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_' . $model::$app_id, compact('all', 'tree')); } return Cache::get('category_' . $model::$app_id); } /** * 所有分类 */ public static function getCategoryALL() { $model = new static; if (!Cache::get('category_all_' . $model::$app_id)) { $data = $model->with(['images'])->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_all_' . $model::$app_id, compact('all', 'tree')); } return Cache::get('category_all_' . $model::$app_id); } /** * 获取所有分类 */ public static function getCacheAll() { return self::getALL()['all']; } /** * 获取所有分类(树状结构) */ public static function getCacheTree() { return self::getALL()['tree']; } public static function getCacheTreeShop($shop_supplier_id=0) { if ($shop_supplier_id){ return self::getSupplierCacheTree($shop_supplier_id); } return self::getALL()['tree']; } /** * 获取所有分类(树状结构) * @return string */ public static function getCacheTreeJson() { return json_encode(static::getCacheTree()); } /** * 获取指定分类下的所有子分类id */ public static function getSubCategoryId($parent_id, $all = []) { $arrIds = [$parent_id]; empty($all) && $all = self::getCacheAll(); foreach ($all as $key => $item) { if ($item['parent_id'] == $parent_id) { unset($all[$key]); $subIds = self::getSubCategoryId($item['category_id'], $all); !empty($subIds) && $arrIds = array_merge($arrIds, $subIds); } } return $arrIds; } /** * 指定的分类下是否存在子分类 */ protected static function hasSubCategory($parentId) { $all = self::getCacheAll(); foreach ($all as $item) { if ($item['parent_id'] == $parentId) { return true; } } return false; } /** * 关联图片 */ public function image() { return $this->belongsTo('app\common\model\file\UploadFile', 'image_id', 'file_id'); } /** * 获取所有一级分类 */ public static function getFirstCategory() { return (new static())->where('parent_id', '=', 0) ->order(['sort' => 'asc', 'create_time' => 'asc']) ->select(); } public function getListByIds($ids) { return $this->field(['category_id', 'name', 'parent_id'])->where('category_id', 'in', $ids)->select(); } /** * 所有分类(商户) */ public static function getSupplierALL($shop_supplier_id) { $model = new static; if (!Cache::get('category_supplier_' . $shop_supplier_id)) { $data = $model->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(); } }