getParams(); $params = $this->checkQueryParams($params); /** * tc => top_category * sc => sub_category */ if (!empty($params['sc'])) { $params['category_id'] = $params['sc']; } elseif (!empty($params['tc'])) { $categoryService = new CategoryService(); $childCategoryIds = $categoryService->getChildCategoryIds($params['tc']); /** * 构造空记录条件 */ $params['category_id'] = $childCategoryIds ?: -999; } $params['published'] = 1; $params['deleted'] = 0; $sort = $pagerQuery->getSort(); $page = $pagerQuery->getPage(); $limit = $pagerQuery->getLimit(); $courseRepo = new CourseRepo(); $pager = $courseRepo->paginate($params, $sort, $page, $limit); return $this->handleCourses($pager); } public function handleCourses($pager) { if ($pager->total_items == 0) { return $pager; } $courses = $pager->items->toArray(); $items = []; $baseUrl = kg_cos_url(); foreach ($courses as $course) { if ($course['fake_user_count'] > $course['user_count']) { $course['user_count'] = $course['fake_user_count']; } $course['cover'] = $baseUrl . $course['cover']; $items[] = [ 'id' => $course['id'], 'title' => $course['title'], 'cover' => $course['cover'], 'model' => $course['model'], 'level' => $course['level'], 'rating' => round($course['rating'], 1), 'market_price' => (float)$course['market_price'], 'vip_price' => (float)$course['vip_price'], 'user_count' => $course['user_count'], 'lesson_count' => $course['lesson_count'], 'review_count' => $course['review_count'], 'favorite_count' => $course['favorite_count'], ]; } $pager->items = $items; return $pager; } protected function checkQueryParams($params) { $validator = new CourseQueryValidator(); $query = []; if (isset($params['teacher_id'])) { $user = $validator->checkUser($params['teacher_id']); $query['teacher_id'] = $user->id; } if (isset($params['tag_id'])) { $tag = $validator->checkTag($params['tag_id']); $query['tag_id'] = $tag->id; } if (isset($params['tc'])) { $category = $validator->checkCategory($params['tc']); $query['tc'] = $category->id; } if (isset($params['sc'])) { $category = $validator->checkCategory($params['sc']); $query['sc'] = $category->id; } if (isset($params['model'])) { $query['model'] = $validator->checkModel($params['model']); } if (isset($params['level'])) { $query['level'] = $validator->checkLevel($params['level']); } if (isset($params['sort'])) { $query['sort'] = $validator->checkSort($params['sort']); } return $query; } }