|
@@ -7,6 +7,7 @@ use App\Http\Requests\Api\PostsRequests\BloggerRequest;
|
|
|
|
|
|
use Illuminate\Http\Request;
|
|
|
use Illuminate\Support\Facades\DB;
|
|
|
+use Illuminate\Support\Facades\Redis;
|
|
|
|
|
|
|
|
|
class BloggerController extends BaseController
|
|
@@ -121,7 +122,7 @@ class BloggerController extends BaseController
|
|
|
return $this->success($list);
|
|
|
}
|
|
|
|
|
|
- //答主列表。 推荐答主列表(随机)、按类型答主列表
|
|
|
+ //答主列表。 推荐答主列表(随机)、搜索答主列表(排序)、按类型答主列表
|
|
|
public function lists(Request $request){
|
|
|
//分页
|
|
|
$page = $request->page ?? 1;
|
|
@@ -129,7 +130,7 @@ class BloggerController extends BaseController
|
|
|
$offset = ($page - 1) * $limit;
|
|
|
|
|
|
//按类型搜
|
|
|
- $type_id = $request->type_id ?? 0;
|
|
|
+// $type_id = $request->type_id ?? 0;
|
|
|
|
|
|
//搜索
|
|
|
$keyword = _empty_default_($request->keyword,'');
|
|
@@ -141,9 +142,10 @@ class BloggerController extends BaseController
|
|
|
->where('blogger.status',1)
|
|
|
->inRandomOrder()->offset($offset)->limit($limit);
|
|
|
|
|
|
- if($type_id){
|
|
|
+ /* if($type_id){
|
|
|
+
|
|
|
$list = $list->whereRaw('FIND_IN_SET(?,type_ids)',[$type_id]);
|
|
|
- }
|
|
|
+ }*/
|
|
|
|
|
|
if($keyword){
|
|
|
$list = $list->where(function($query) use ($keyword) {
|
|
@@ -157,5 +159,55 @@ class BloggerController extends BaseController
|
|
|
return $this->success($list);
|
|
|
}
|
|
|
|
|
|
+ //按类型答主列表
|
|
|
+ public function listsByType(Request $request){
|
|
|
+ //按类型搜
|
|
|
+ $type_id = $request->type_id ?? 0;
|
|
|
+ $request_id = $request->request_id ?? time(); //防止第二次搜索相同的词
|
|
|
+
|
|
|
+ //缓存,防重复
|
|
|
+ $user_id = $request->uid;
|
|
|
+ $user_id_redis = 'Blogger:listsByType:'.$user_id.':'.$type_id.':'.$request_id;
|
|
|
+ $redis_ids = json_decode(Redis::get($user_id_redis),true);
|
|
|
+
|
|
|
+ //分页
|
|
|
+ $page = $request->page ?? 1;
|
|
|
+ $limit = $request->limit ?? 10;
|
|
|
+ $offset = ($page - 1) * $limit;
|
|
|
+
|
|
|
+ //
|
|
|
+ $list = DB::table('blogger')
|
|
|
+ ->leftJoin('wx_user','wx_user.id','=','blogger.user_id')
|
|
|
+ ->select('blogger.*','wx_user.user_avatar','wx_user.user_name')
|
|
|
+ ->where('blogger.status',1);
|
|
|
+
|
|
|
+ if($type_id){
|
|
|
+ $list = $list->whereRaw('FIND_IN_SET(?,type_ids)',[$type_id]);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(!empty($redis_ids)){
|
|
|
+ $list = $list->whereNotIn('blogger.user_id',$redis_ids);
|
|
|
+ }
|
|
|
+
|
|
|
+ $list = $list->inRandomOrder()->offset(0)->limit($limit);
|
|
|
+ $list = $list->get();
|
|
|
+ $list = json_decode(json_encode($list),true);
|
|
|
+
|
|
|
+ // 追加一个防重复
|
|
|
+ if($list){
|
|
|
+ $list_ids = array_column($list,'user_id');
|
|
|
+ if($redis_ids){
|
|
|
+ $redis_ids = array_merge($redis_ids,$list_ids);
|
|
|
+ }else{
|
|
|
+ $redis_ids = $list_ids;
|
|
|
+ }
|
|
|
+ $redis_ids = array_unique($redis_ids);
|
|
|
+ Redis::set($user_id_redis,json_encode($redis_ids),1800);
|
|
|
+ }
|
|
|
+
|
|
|
+ return $this->success($list);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
|
|
|
}
|