post = $post; } /** * 推荐内容列表 */ public function suggestPost($request) { $perPage = isset($request['per_page']) ? $request['per_page'] : 20; $where = []; $where[] = ['is_hide', 0]; if(isset($request['content'])){ $where[] = ['content', 'like', "%{$request['content']}%"]; } if(isset($request['is_suggest'])){ $where[] = ['is_suggest', $request['is_suggest']]; } if(isset($request['type'])){ $where[] = ['type', $request['type']]; } if(isset($request['uid'])){ $where[] = ['uid', $request['uid']]; } return $this->post ->join('post_data', 'post_data.post_id', '=', 'post.id') ->select('post.*') ->where($where) ->where(function($query) use ($request){ if(isset($request['keyword'])){ $query->where('uid', '=', $request['keyword']) ->orWhere('username', 'like', "%{$request['keyword']}%") ->orWhere('mobile', 'like', "%{$request['keyword']}%"); } }) ->where(function($query) use ($request){ if(isset($request['created_at'])){ $time = explode('_', $request['created_at']); $query->whereBetween('post.created_at', $time); } }) ->where(function ($query) use ($request){ if(isset($request['category_ids']) || isset($request['topic_ids'])){ $ids = []; if (isset($request['category_ids'])) { $categoryIds = explode('_', $request['category_ids']); $ids = $this->categoryTopic->whereIn('category_id', $categoryIds)->pluck('topic_id')->toArray(); } if (isset($request['topic_ids'])) { $ids = array_merge($ids, explode('_', $request['topic_ids'])); } foreach ($ids as $key=>$id) { if ($key==0) { $query = $query->whereRaw('FIND_IN_SET('.$id.',topic_ids)'); } else { $query = $query->orWhereRaw('FIND_IN_SET('.$id.',topic_ids)'); } } } }) ->orderBy('weight','desc') ->paginate($perPage); } /** * 更新帖子统计数量 * @param $request * @return mixed */ public function updatePostData($request) { $postId = $request['post_id']; $post = PostData::where('post_id', $postId)->first(); if (isset($request['behavior_flag']) && $request['behavior_flag'] == 'read') { $post->pv += 1; $post->pv_real += 1; } elseif (isset($request['behavior_flag']) && $request['behavior_flag'] == 'unlike') { $post->dislike += 1; } elseif (isset($request['behavior_flag']) && $request['behavior_flag'] == 'like') { if($request['behavior_value']){ $post->praise_count += 1; $post->praise_real_count += 1; PostLike::create(['uid'=>$request['target_id'],'post_id'=>$request['post_id']]); }else{ $post->praise_count -= 1; $post->praise_real_count -= 1; PostLike::where(['uid'=>$request['target_id'],'post_id'=>$request['post_id']])->delete(); } } elseif (isset($request['behavior_flag']) && $request['behavior_flag'] == 'forward') { $post->share_count += 1; $post->share_real_count += 1; } elseif (isset($request['behavior_flag']) && $request['behavior_flag'] == 'comment') { $post->comment_count += 1; } elseif (isset($request['behavior_flag']) && $request['behavior_flag'] == 'collect') { if($request['behavior_value']) { $post->collect_count += 1; $post->collect_real_count += 1; PostCollect::create(['uid'=>$request['target_id'],'post_id'=>$request['post_id']]); }else{ $post->collect_count -= 1; $post->collect_real_count -= 1; PostCollect::where(['uid'=>$request['target_id'],'post_id'=>$request['post_id']])->delete(); } } return $post->save(); } /** * 收集所有有操作的帖子,存入redis * 供后续计算帖子权重 * @param $id */ public function collectPostId($id) { $key = "community_calc_post_score"; Redis::sadd($key,$id); } }