where("title","like","%{$keyword}%") ->orderBy("hot","desc") ->limit(20) ->get(); return $data; } /** * 发布动态 */ public function release(DynamicParam $dynamicParam){ //如果设置了标签 新标签则添加 否则就热度加1 $tag_ins = ''; if(!empty($dynamicParam->tag)){ $tag = json_decode($dynamicParam->tag,true); foreach ($tag as $v){ if($v['id']==0){ $id = DB::table('dynamic_tag')->insertGetId([ "title"=>htmlspecialchars($v['title']), "hot"=>1 ]); $tag_ins.= $id.','; }else{ DB::table('dynamic_tag')->where(['id'=>$v['id']])->increment('hot',1); $tag_ins.= $v['id'].','; } } if(strlen($tag_ins)>0){ $tag_ins = substr($tag_ins,0,-1); } } $data = [ "content"=>$dynamicParam->content, "img_url"=>json_encode($dynamicParam->img_url), "status"=>$dynamicParam->status, "type"=>$dynamicParam->type, "tag"=>$tag_ins, "user_id"=>$dynamicParam->user_id, "city"=>$dynamicParam->city, "latitude"=>$dynamicParam->latitude, "longitude"=>$dynamicParam->longitude, ]; DynamicModel::create($data); return true; } /** * 动态列表 */ public function dynamic_list($where){ $user = auth('api')->user(); if($user){ $lat = $user->latitude; $lng = $user->longitude; } $dynamic = DynamicModel::query(); $dynamic = $dynamic->with(["user"=>function($query){ $query->select('id','sex','is_vip','tencent_im_user_id'); },'user_info']); //查询条件 //类型 type 1全部 2附近 if($where['type']==2){ //附近 } //性别 if($where['look_type']!=3){ $dynamic = $dynamic->whereHas('user',function($query)use($where){ $query->where('sex',$where['look_type'])->select(); }); } //用户id if($where['user_id']!=0){ $dynamic = $dynamic->where('user_id','=',$where['user_id']); } //标签 if($where['tag_id']!=0){ $dynamic = $dynamic->whereRaw('FIND_IN_SET(?,tag)',[$where['tag_id']]); } $dynamic = $dynamic->orderByDesc('id') ->paginate(request('perPage',20)); $dynamic = $dynamic->toArray(); foreach ($dynamic['data'] as $k=>$v){ $dynamic['data'][$k]['img_url'] = json_decode($v['img_url'],true); //$dynamic['data'][$k]['tag'] = json_decode($v['tag'],true); if(!empty($v['site'])){ $dynamic['data'][$k]['site'] = json_decode($v['site'],true); $site = json_decode($v['site'],true); }else{ } //计算距离 如果设置了位置,使用设置位置 否则使用定位位置 $dynamic['data'][$k]['distance'] = 0; $dynamic['data'][$k]['atime'] = uc_time_ago(strtotime($v['created_at'])); $dynamic['data'][$k]['tag'] = DB::table("dynamic_tag")->whereIn('id',explode(',',$v['tag']))->get(); $is_zan = 0; if($user = auth('api')->user()){ if(DynamicZanModel::query()->where(['user_id'=>$user->id,'dynamic_id'=>$v['id']])->first()){ $is_zan = 1; } } $dynamic['data'][$k]['is_zan'] = $is_zan; } return $dynamic; } //点赞 如果已经点赞 则取消点赞 public function zan(DynamicZanParam $dynamicZanParam){ if(empty($dynamicZanParam->dynamic_id)){ throw new Exception('参数错误'); } $dynamic = DynamicModel::where(['id'=>$dynamicZanParam->dynamic_id])->first(); if(!$dynamic){ throw new Exception("动态不存在"); } if($dynamic_zan = DynamicZanModel::query()->where(['user_id'=>$dynamicZanParam->user_id,'dynamic_id'=>$dynamicZanParam->dynamic_id])->first()){ $zan = 0; //已点赞 取消点赞 DynamicModel::query()->where('id',$dynamicZanParam->dynamic_id)->decrement('zan_num',1); $dynamic_zan->delete(); }else{ $zan = 1; //点赞 DynamicModel::query()->where('id',$dynamicZanParam->dynamic_id)->increment('zan_num',1); DynamicZanModel::query()->create([ 'user_id'=>$dynamicZanParam->user_id, 'dynamic_id'=>$dynamicZanParam->dynamic_id, 'status'=>0, 'atime'=>date('Y-m-d H:i:s'), ]); } return $zan; } //删除动态 public function del(DynamicParam $dynamicParam){ if(empty($dynamicParam->id)){ throw new Exception('参数错误'); } $dynamic = DynamicModel::query()->where(['id'=>$dynamicParam->id])->first(); if(!$dynamic){ throw new Exception("动态不存在"); } $dynamic->delete(); return true; } //举报动态 public function report(UserReportParam $userReportParam){ if(empty($userReportParam->report_id)){ throw new Exception('参数错误'); } if(empty($userReportParam->content)){ throw new Exception('请输入举报内容'); } if($userReportParam->type==2){ $dynamic = DynamicModel::query()->where(['id'=>$userReportParam->report_id])->first(); if(!$dynamic){ throw new Exception("动态不存在"); } }else{ $user = User::query()->where('id',$userReportParam->report_id)->first(); if(!$user){ throw new Exception("用户不存在"); } } UserReportModel::query()->create([ "user_id"=>$userReportParam->user_id, "report_id"=>$userReportParam->report_id, "type"=>$userReportParam->type, "content"=>htmlspecialchars($userReportParam->content), "info"=>htmlspecialchars($userReportParam->info), "status"=>0, "img_url"=>$userReportParam->img_url, ]); return true; } }