all()->toArray(); //添加推荐标签 $array = [ 'id'=>0, 'title'=>'推荐', ]; array_unshift($labels, $array); //分类列表 // $groups = $arena_group->all(); return $this->success('ok', compact('labels')); } /** * 竞技场列表 */ public function arenasV2(Request $request, Arena $arena, ArenaMember $arena_member, ArenaLabel $label) { $arenas = $arena->orderBy('id', 'asc'); $group_id = $request->input('group_id'); if ($group_id) { $arenas = $arenas->where('group_id', $group_id); } $labels = []; $label_id = $request->input('label_id'); if ($label_id) { $label_id = explode(',', $label_ids); if (is_array($label_ids) && count($label_ids)) { // $arena_ids = $arena_label_link->whereIn('label_id', $label_ids)->distinct('arena_id')->pluck('arena_id'); // $arenas = $arenas->whereIn('id', $arena_ids); $arenas = $arenas->whereHas('labelLink', function($sql) use($label_ids){ $sql->whereIn('label_id', $label_ids); }); } $labels = $label->whereIn('id', $label_ids)->get(); } $arenas = $arenas->paginate(); foreach ($arenas as $arena_obj) { $first_team = $arena_member->where('arena_id', $arena_obj->id)->where('team', 1)->orderBy('id', 'desc')->limit(6)->get(); $second_team = $arena_member->where('arena_id', $arena_obj->id)->where('team', 2)->orderBy('id', 'desc')->limit(6)->get(); $arena_obj->male_team = $first_team; $arena_obj->female_team = $second_team; } return $this->success('ok', compact('arenas', 'labels')); } public function arenas(Request $request, Arena $arena, ArenaMember $arena_member, ArenaGroup $group, ArenaLabel $arena_lable) { $label_id = $request->input('label_id', 0); $group_id = $request->input('group_id', 0); if (empty($label_id)) {//推荐 $group_ids = Arena::where('is_recommend', 1)->pluck('group_id'); $groups = $group->whereIn('id', $group_ids)->get(); $arenas = $arena->where('is_recommend', 1); }else{ $groups = $group->where('id', $label_id)->get(); $group_ids = $groups->pluck('group_id'); $arenas = $arena->whereIn('id', $group_ids); } $group_id = $request->input('group_id', 0); if ($group_id) { $arenas->where('group_id', $group_id); } $arenas = $arenas->orderBy('is_recommend', 'desc')->orderBy('status', 'asc')->orderBy('created_at', 'asc')->orderBy('id', 'desc')->paginate(); foreach ($arenas as $arena_obj) { $first_team = $arena_member->where('arena_id', $arena_obj->id)->where('team', 1)->orderBy('id', 'desc')->limit(6)->get(); $second_team = $arena_member->where('arena_id', $arena_obj->id)->where('team', 2)->orderBy('id', 'desc')->limit(6)->get(); $arena_obj->male_team = $first_team; $arena_obj->female_team = $second_team; } return $this->success('ok', compact('arenas', 'groups')); } /** * 竞技场详情 */ public function arena(Request $request, Arena $arena, ArenaPreviewHistory $history, ArenaList $arena_list, User $user_obj) { $arena->intro = json_decode($arena->intro, true); $from_user_id = $request->input('from_user_id'); if ($from_user_id) { $from_user_ids = explode(',', $from_user_id); if (is_array($from_user_ids) && $from_user_ids[0]) { $from_user_id = $from_user_ids[0]; $result = $this->addArenaPreview($request, $arena->id, $from_user_id, $history); $this->addArenaList($arena->id, $from_user_id, $arena_list, $result); } } $arena->increment('click_num', 1); $comments = $arena->comments()->orderBy('id', 'desc')->paginate(); foreach ($comments as $comment) { $comment->user = User::where('id', $comment->commented_id)->select('id', 'name', 'photo')->first(); } //榜单 $list = $arena_list->where('arena_id', $arena->id)->with('user.wechat')->orderBy('share_num', 'desc')->paginate(); $cache_key = 'arena_preview_history_'.$arena->id; //添加访问记录 $user = auth()->user(); if (empty($user)) { $user = $this->authCheck(); } if ($user) {//用户已登录 $key = $user->id; $user_ids = Redis::lrange($cache_key, 0, -1); if (in_array($key, $user_ids)) { Redis::lrem($cache_key, 1, $key); } Redis::lpush($cache_key, $key); } //访问记录 $user_ids = Redis::lrange($cache_key, 0, 15); $user_list = []; foreach ($user_ids as $user_id) { $user = $user_obj->where('id', $user_id)->select('id', 'name', 'circle_avatar')->first(); $user_list[] = $user; } return $this->success('ok', compact('arena', 'comments', 'list', 'user_list')); } public function arenaComments(Request $request, Arena $arena) { //留言 $comments = $arena->comments()->orderBy('id', 'desc')->paginate(); foreach ($comments as $comment) { $comment->user = User::where('id', $comment->commented_id)->select('id', 'name', 'photo')->first(); } return $this->success('ok', $comments); } public function arenaLists(Request $request, Arena $arena, ArenaList $arena_list) { //榜单 $list = $arena_list->where('arena_id', $arena->id)->where('share_num','<>', 0)->with('user.wechat')->orderBy('share_num', 'desc')->orderBy('id', 'desc')->get(); return $this->success('ok', $list); } /** * 添加分享记录 */ public function addArenaList($arena_id, $from_user_id, $arena_list, $result) { $list = $arena_list->firstOrCreate(['arena_id'=>$arena_id, 'user_id'=>$from_user_id]); if ($list) { $list->increment('share_num', 1); } return; } /** * 添加查看记录 */ public function addArenaPreview($request, $arena_id, $share_user_id, $history) { $user = auth()->user(); if (empty($user)) { $user = $this->authCheck(); } $openid = $request->session()->get('official_openid'); $count = $history->where('openid', $openid)->count(); if ($count || empty($openid)) { return false; } if ($user) { $data['user_id'] = $user->id; $data['arena_id'] = $arena_id; $data['openid'] = $openid; $data['name'] = $user->name; $data['avatar'] = $user->photo; $data['share_user_id'] = $share_user_id; $user->wechat->official_openid = $openid; $user->wechat->save(); }else{ $data['openid'] = $openid; $data['share_user_id'] = $share_user_id; $data['arena_id'] = $arena_id; } $history->create($data); return true; } /** * 加入竞技场 */ public function joinArena(Request $request, Arena $arena, ArenaMember $arena_member) { $user = auth()->user(); //判断是否已加入 $count = $arena_member->where('arena_id', $arena->id)->where('user_id', $user->id)->count(); if ($count) { return $this->failure('已参加过【'.$arena->title.'】'); } //判断是否有性别 if (empty($user->sex)) { return $this->failure('请先编辑个人信息'); } $data['user_id'] = $user->id; $data['arena_id'] = $arena->id; $data['team'] = $user->sex; $data['avatar'] = $user->photo?:$user->wechat->avatar2; $arena_member->create($data); $arena->increment($user->sex == 1?'male_team_num':'female_team_num'); return $this->success('ok'); } /** * 留言竞技场 */ public function commentArena(Request $request, Arena $arena) { $user = auth()->user(); $content = $request->input('content'); if (empty($content)) { return $this->failure('请输入内容'); } $comment = $user->comment($arena, $content); $comment->user = User::where('id', $comment->commented_id)->select('id', 'name', 'photo')->first(); #redis $cache_key = 'arena_'.$arena->id.'_comments'; return $this->success('ok', $comment); } }