massagerModel = new \app\api\model\massager\Massager(); } public function fetch() { $params = (new BaseApiValidate([ "lng" => "require|number", "lat" => "require|number", "page" => "require|number", "size" => "require|number", "hot" => "number", "topic_id" => "number", "local" => "number", "city_code" => "number", "collect" => "number", ]))->checkBody(); $dynamicModel = new Dynamic(); $where = [ ['status', "=", \E_BASE_STATUS::Normal], ]; $subQuery = $dynamicModel->field("*,round(st_distance_sphere (point({$params["lng"]},{$params["lat"]}), point ( `lng`, `lat` ))) distance"); if (isset($params["hot"]) && $params["hot"] == 1) { $where[] = ["hot", "=", 1]; } if (isset($params["topic_id"]) && $params["topic_id"] > 0) { $where[] = ["topic_id", "=", $params["topic_id"]]; } if (isset($params["local"]) && $params["local"] == 1) { if (!isset($params["city_code"])) $this->error("定位错误!"); $where[] = ["city_code", "=", $params["city_code"]]; } if (isset($params["collect"]) && $params["collect"] == 1) { $user = $this->auth->getUser(); $collects = (new Collect())->where("user_id", $user ? $user["id"] : -1)->select(); $where[] = ["massager_id", "in", array_map(function ($item) { return $item["massager_id"]; }, $collects)]; } if (isset($params["search_text"]) && mb_strlen($params["search_text"]) > 0) { $where[] = ["massager.name", "like", "%{$params["search_text"]}%"]; } foreach ($where as $item) { $subQuery->where($item[0], $item[1], $item[2]); } $query = $dynamicModel->table($subQuery->buildSql() . ' distance'); foreach ($where as $item) { $query->where($item[0], $item[1], $item[2]); } $paginate = $query ->page($params["page"]) ->paginate($params["size"]); $items = collection($paginate->items())->toArray(); $massager_ids = array_map(function ($data) { return $data["massager_id"]; }, $items); $massagers = $this->massagerModel->where("id", "in", $massager_ids)->select(); $f_massager = array_reduce($massagers, function ($p, $cur) { $p[$cur["id"]] = $cur; return $p; }, []); $topicModel = new Topic(); $likeModel = new Like(); $commentModel = new Comment(); foreach ($items as &$item) { $item["massager"] = $f_massager[$item["massager_id"]] ?? ["id" => null, "name" => null]; $item["topic"] = $topicModel->get($item["topic_id"]); $item["like_count"] = $likeModel->where("dynamic_id", "=", $item["id"])->count(); $item["comment_count"] = $commentModel->where("status", "normal")->where("dynamic_id", $item["id"])->count(); } $this->success([ $items, $paginate->total() ]); } public function getDynamic($id) { $res = (new Dynamic()) ->where("id", $id) ->with(["comments", "likes", "comments.user"]) ->find(); $user = $this->auth->getUser(); $res["is_can_like"] = true; if ($user) { $q = array_column($res["likes"], "user_id", "user_id"); if (isset($q[$user["id"]])) $res["is_can_like"] = false; } $res ? $this->success($res) : $this->error("数据不存在!"); } }