wesmiler 2 лет назад
Родитель
Сommit
5a1858205c

+ 10 - 0
app/Http/Controllers/Api/v1/LiveCategoryController.php

@@ -18,4 +18,14 @@ class LiveCategoryController extends webApp
     {
         return message(1010,true, LiveCategoryService::make()->options());
     }
+
+    /**
+     * 分类
+     * @return array
+     */
+    public function search()
+    {
+        $params = request()->all();
+        return message(1010,true, LiveCategoryService::make()->search($params));
+    }
 }

+ 57 - 1
app/Services/Api/LiveCategoryService.php

@@ -49,18 +49,74 @@ class LiveCategoryService extends BaseService
         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";
+        $cacheKey = "caches:live:categorys:list";
         $datas = RedisService::get($cacheKey);
         if($datas){
             return $datas;