topic = $topic; $this->categoryTopic = $categoryTopic; } //列表 public function index($request){ $perPage = isset($request['per_page']) ? $request['per_page'] : 20; $where = []; if(isset($request['name'])){ $where[] = ['name', 'like', "%{$request['name']}%"]; } if(isset($request['topic_status'])){ if($request['topic_status'] == 'is_suggest'){ $where[] = ['is_suggest', 1]; } if( $request['topic_status'] == 'is_hot'){ $where[] = ['is_hot', 1]; } if($request['topic_status'] == 'is_open'){ $where[] = ['is_open', 1]; } if($request['topic_status'] == 'is_close'){ $where[] = ['is_open', 0]; } } return $this->topic ->where($where) ->orderBy('is_hot','desc') ->orderBy('is_suggest','desc') ->orderBy('is_open','desc') ->orderBy('id','desc') ->paginate($perPage); } //新增 public function create($request){ $topic = $this->topic->where(['name'=>$request['name']])->first(); if($topic){ return Response::create([ 'message' => '该话题已存在', 'status_code' => 500 ]); } $data = [ 'name' => $request['name'], 'img' => $request['img'], 'desc' => $request['desc'], 'base_count' => $request['base_count'], ]; if(isset($request['category_ids'])){ $category_ids = explode(',', $request['category_ids']); } DB::beginTransaction(); try{ $topicInfo = $this->topic->create($data); if($topicInfo){ if($category_ids){ $category_topic_data = []; foreach($category_ids as $value){ $category_topic_data[] = [ 'category_id' => $value, 'topic_id' => $topicInfo->id, ]; } $this->categoryTopic->insert($category_topic_data); } } DB::commit(); Redis::zadd('topic.name', $topicInfo->id, $topicInfo->name); return Response::create(); }catch (QueryException $exception){ DB::rollBack(); Log::debug('新增话题:'.$exception->getMessage()); return Response::create([ 'message' => '新增话题,请重试', 'error' => $exception->getMessage(), 'status_code' => 500 ]); } } public function edit($request){ $topic = $this->topic->where(['id'=>$request['id']])->first(); if(!$topic){ return Response::create([ 'message' => '该话题不存在', 'status_code' => 500 ]); } $oldName = $topic->name; $_topic = $this->topic->where(['name'=>$request['name']])->where('id','<>',$topic->id)->first(); if($_topic){ return Response::create([ 'message' => '该话题已存在', 'status_code' => 500 ]); } $topic->name = $request['name']; $topic->img = $request['img']; $topic->desc = $request['desc']; $topic->base_count = $request['base_count']; $category_ids = []; if(!empty($request['category_ids'])){ $category_ids = explode(',', $request['category_ids']); } DB::beginTransaction(); try{ //保存 $topicInfo = $topic->save(); //删除原来关联关系 $this->categoryTopic->where(['topic_id'=>$topic->id])->delete(); if($topicInfo){ if($category_ids){ $category_topic_data = []; foreach($category_ids as $value){ $category_topic_data[] = [ 'category_id' => $value, 'topic_id' => $topic->id, ]; } $this->categoryTopic->insert($category_topic_data); } } DB::commit(); if($oldName != $topic->name){ Redis::zrem('topic.name', $oldName); Redis::zadd('topic.name', $topic->id, $topic->name); } return Response::create(); }catch (QueryException $exception){ DB::rollBack(); Log::debug('编辑话题:'.$exception->getMessage()); return Response::create([ 'message' => '编辑话题,请重试', 'error' => $exception->getMessage(), 'status_code' => 500 ]); } } //修改 public function update($request){ $topic = $this->topic->where('id', $request['id'])->first(); if(!$topic){ return Response::create([ 'message' => '该话题不存在', 'status_code' => 500 ]); } if(isset($request['is_open']) && $request['is_open'] !== null){ $topic->is_open = $request['is_open']; } if(!empty($request['type'])){ if($topic->is_open == 0){ return Response::create([ 'message' => '该话题未开启', 'status_code' => 500 ]); } if(isset($request['type']) && $request['type'] == 1){ $topic->is_suggest = $request['status']; } if(isset($request['type']) && $request['type'] == 2){ $topic->is_hot = $request['status']; } } $res = $topic->save(); if($res){ return Response::create(); } } //详情 public function view($request){ return $this->topic->where('id', $request['id'])->first(); } //获取多个话题 public function getTopics($ids = []){ return $this->topic->whereIn('id', $ids)->select('id','name')->get(); } /** * 重置话题redis */ public function resetRedis() { $TopicName = $this->topic->pluck('id', 'name')->toArray(); $res = Redis::zadd('topic.name', $TopicName); if($res){ return Response::create([ 'message' => '重置话题成功', 'status_code' => 500 ]); }else{ return Response::create([ 'message' => '重置话题失败', 'status_code' => 500 ]); } } }