// +---------------------------------------------------------------------- namespace App\Services\Api; use App\Models\LiveCategoryModel; use App\Services\BaseService; use App\Services\RedisService; /** * 直播分类管理-服务类 * @author laravel开发员 * @since 2020/11/11 * @package App\Services\Api */ class LiveCategoryService extends BaseService { // 静态对象 protected static $instance = null; /** * 构造函数 * @author laravel开发员 * @since 2020/11/11 * GoodsCategoryService constructor. */ public function __construct() { $this->model = new LiveCategoryModel(); } /** * 静态入口 * @return static|null */ public static function make() { if (!self::$instance) { self::$instance = (new static()); } return self::$instance; } /** * 搜索 * @param $params * @return array|mixed */ public function search($params) { $cacheKey = "caches:live:categorys:search_".md5(json_encode($params)); $datas = RedisService::get($cacheKey); if($datas){ return $datas; } $ids = $this->model->where(['status'=>1,'mark'=>1,'pid'=>0]) ->where(function($query) use($params){ $kw = isset($params['kw'])? trim($params['kw']) : ''; if($kw){ $query->where('name','like',"%{$kw}%") ->orWhere('name_en','like', "%{$kw}%") ->orWhere('name_sk','like', "%{$kw}%") ->orWhere('name_fr','like', "%{$kw}%") ->orWhere('name_ind','like', "%{$kw}%") ->orWhere('name_jap','like', "%{$kw}%") ->orWhere('name_vie','like', "%{$kw}%") ->orWhere('name_tha','like', "%{$kw}%") ->orWhere('name_mal','like', "%{$kw}%"); } })->pluck('id'); $datas = $this->model->where(['status'=>1,'mark'=>1]) ->where('pid','>',0) ->where(function($query) use($params, $ids){ $kw = isset($params['kw'])? trim($params['kw']) : ''; if($kw){ $query->where('name','like',"%{$kw}%") ->orWhere('name_en','like', "%{$kw}%") ->orWhere('name_sk','like', "%{$kw}%") ->orWhere('name_fr','like', "%{$kw}%") ->orWhere('name_ind','like', "%{$kw}%") ->orWhere('name_jap','like', "%{$kw}%") ->orWhere('name_vie','like', "%{$kw}%") ->orWhere('name_tha','like', "%{$kw}%") ->orWhere('name_mal','like', "%{$kw}%"); } if($ids){ $query->orWhereIn('pid',$ids); } }) ->select(['id','pid','name','name_sk','name_fr','name_ind','name_en','name_jap','name_mal','name_vie','name_tha','status']) ->orderBy('sort','desc') ->orderBy('id','asc') ->get(); $datas = $datas? $datas->toArray() : []; if($datas){ RedisService::set($cacheKey, $datas, 3600); } return $datas; } /** * 分类 * @return array|mixed */ public function options() { $cacheKey = "caches:live:categorys:list"; $datas = RedisService::get($cacheKey); if($datas){ return $datas; } $categorys = []; $datas = $this->model->where(['status'=>1,'mark'=>1]) ->select(['id','pid','name','name_sk','name_fr','name_ind','name_en','name_jap','name_mal','name_vie','name_tha','status']) ->orderBy('sort','desc') ->orderBy('id','asc') ->get(); $datas = $datas? $datas->toArray() : []; if($datas){ foreach($datas as $item){ $item['checked'] = false; $item['children'] = []; if($item['pid']){ $categorys[$item['pid']]['children'] = isset($categorys[$item['pid']]['children'])? $categorys[$item['pid']]['children'] : []; $categorys[$item['pid']]['children'][] = $item; }else if ($item['pid'] == 0){ $categorys[$item['id']] = $item; } } $categorys = array_values($categorys); RedisService::set($cacheKey, $categorys, 3600); } return $categorys; } }