function (Relation $query) { $query->order('id asc'); }, ])->where('uid', $uid)->find(); if (empty($model_post)) { return $this->error('链接已失效', '/'); } Cache::set($cache_key, $model_post, 600); } $model_post->hits = Db::raw('hits + 1'); $model_post->save(); $list_last_visit = PostVisit::where('post_id', $model_post->id) ->order('id desc') ->group('ip,uid') ->limit(12) ->cache(60) ->select(); View::assign('post', $model_post); View::assign('list_last_visit', $list_last_visit); $model_visit = $this->recordVisit($model_post->id); View::assign('model_visit', $model_visit); return View::fetch(); } public function recordVisit($post_id) { $model_visit = new PostVisit(); $model_visit->uid = $this->userinfo['uid'] ?? ''; $model_visit->post_id = $post_id; $model_visit->avatar = $this->userinfo['avatar'] ?? ''; $model_visit->nickname = $this->userinfo['nickname'] ?? ''; $model_visit->ip = $this->request->ip(); $user_agent = $this->request->header('user-agent'); $dd = new DeviceDetector($user_agent); $cache = Cache::instance(); $dd->setCache( new \DeviceDetector\Cache\PSR16Bridge($cache) ); $dd->parse(); $model_visit->client_bot = $dd->getBot() ?: ''; $model_visit->client = $dd->getClient(); $model_visit->client_os = $dd->getOs(); $model_visit->client_device_name = $dd->getDeviceName(); $model_visit->client_brand_name = $dd->getBrandName(); $model_visit->client_model = $dd->getModel(); $model_visit->save(); return $model_visit; } public function markVisit($visit_id) { $model_visit = PostVisit::find($visit_id); $model_visit->is_js_run = 1; $model_visit->save(); return json_message(); } }