From d0e4be6c45f0298fd0625c9acfcb81f7ecdc5935 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 1 Nov 2024 11:39:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E7=A7=91=E6=99=AE=E6=96=87=E7=AB=A0=E5=88=97=E8=A1=A8=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/ArticleController.php | 58 ++++++++++++++++++++++++++-- app/Model/ArticleScience.php | 35 ++++++++++++++++- app/Request/ArticleRequest.php | 6 +++ config/routes.php | 5 ++- 4 files changed, 99 insertions(+), 5 deletions(-) diff --git a/app/Controller/ArticleController.php b/app/Controller/ArticleController.php index f071fd3..0664b66 100644 --- a/app/Controller/ArticleController.php +++ b/app/Controller/ArticleController.php @@ -16,15 +16,15 @@ use Psr\Http\Message\ResponseInterface; class ArticleController extends AbstractController { /** - * 获取科普文章列表 + * 获取科普文章列表-分页 * @return ResponseInterface * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ - public function getArticleScienceList(): ResponseInterface + public function getArticleSciencePage(): ResponseInterface { $request = $this->container->get(ArticleRequest::class); - $request->scene('getArticleScienceList')->validateResolved(); + $request->scene('getArticleSciencePage')->validateResolved(); $keyword = $this->request->input('keyword',""); $is_top = $this->request->input('is_top'); @@ -66,4 +66,56 @@ class ArticleController extends AbstractController } return $this->response->json(success($article_sciences)); } + + /** + * 获取科普文章列表 + * @return ResponseInterface + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + */ + public function getArticleScienceList(): ResponseInterface + { + $request = $this->container->get(ArticleRequest::class); + $request->scene('getArticleScienceList')->validateResolved(); + + $keyword = $this->request->input('keyword',""); + $is_top = $this->request->input('is_top'); + $source_id = $this->request->input('source_id'); + $basic_class_id = $this->request->input('basic_class_id'); + + // 组合条件 + $article_science_params = array();// 文章搜索 + $article_science_class_params = array();// 文章分类搜索 + + // 是否置顶(0:否 1:是) + if (!empty($is_top)){ + $article_science_params['is_top'] = $is_top; + } + + // 来源id + if (!empty($source_id)){ + $article_science_params['source_id'] = $source_id; + } + + // 分类id + if (!empty($basic_class_id)){ + $article_science_class_params['basic_class_id'] = $basic_class_id; + } + + $fields = ["*"]; + $article_sciences = ArticleScience::getArticleScienceList($keyword,$article_science_params, $article_science_class_params, $fields); + $article_sciences = $article_sciences->toArray(); + if (!empty($article_sciences)) { + foreach ($article_sciences as &$article_science) { + $article_science['article_image'] = addAliyunOssWebsite($article_science['article_image']); + + if (!empty($article_science["ArticleScienceSource"])){ + $article_science["ArticleScienceSource"]["source_image"] = addAliyunOssWebsite($article_science["ArticleScienceSource"]["source_image"]); + } + + } + } + + return $this->response->json(success($article_sciences)); + } } \ No newline at end of file diff --git a/app/Model/ArticleScience.php b/app/Model/ArticleScience.php index 18a39c9..3c35b6b 100644 --- a/app/Model/ArticleScience.php +++ b/app/Model/ArticleScience.php @@ -80,7 +80,7 @@ class ArticleScience extends Model } /** - * 获取列表 + * 获取列表-分页 * @param string $keyword * @param array $article_science_params 搜索条件 * @param array $article_science_class_params 分类搜索条件 @@ -120,4 +120,37 @@ class ArticleScience extends Model return $data; } + /** + * 获取列表 + * @param string $keyword + * @param array $article_science_params 搜索条件 + * @param array $article_science_class_params 分类搜索条件 + * @param array $fields + * @param int $limit + * @return Collection|array + */ + public static function getArticleScienceList(string $keyword = "", array $article_science_params = [], array $article_science_class_params = [], array $fields = ["*"], int $limit = 10): Collection|array + { + $query = self::with(['ArticleScienceSource']) + ->where($article_science_params) + ->when($keyword, function ($query, $keyword) { + $query->where(function ($query) use ($keyword) { + $query->orwhere("article_title", 'like', '%' . $keyword . '%'); + $query->orWhereHas('ArticleScienceSource', function ($query) use ($keyword) { + $query->where('source_name', 'like', '%' . $keyword . '%'); + }); + $query->orWhereHas('ArticleScienceClass.BasicArticleClass', function ($query) use ($keyword) { + $query->where('basic_class_name', 'like', '%' . $keyword . '%'); + }); + }); + }) + ->whereHas('ArticleScienceClass.BasicArticleClass', function ($query) use ($article_science_class_params) { + $query->where($article_science_class_params); + }); + + $data = $query->limit($limit)->get($fields); + + return $data; + } + } diff --git a/app/Request/ArticleRequest.php b/app/Request/ArticleRequest.php index 17ecfff..bd47c4b 100644 --- a/app/Request/ArticleRequest.php +++ b/app/Request/ArticleRequest.php @@ -10,6 +10,12 @@ use Hyperf\Validation\Request\FormRequest; class ArticleRequest extends FormRequest { protected array $scenes = [ + 'getArticleSciencePage' => [ + 'keyword', + 'is_top', + 'source_id', + 'basic_class_id', + ], 'getArticleScienceList' => [ 'keyword', 'is_top', diff --git a/config/routes.php b/config/routes.php index 7a7eaa8..3b22197 100644 --- a/config/routes.php +++ b/config/routes.php @@ -629,8 +629,11 @@ Router::addGroup('/patient', function () { Router::addGroup('/article', function () { // 科普文章 Router::addGroup('/science', function () { + // 获取科普文章列表-分页 + Router::get('', [ArticleController::class, 'getArticleSciencePage']); + // 获取科普文章列表 - Router::get('', [ArticleController::class, 'getArticleScienceList']); + Router::get('/list', [ArticleController::class, 'getArticleScienceList']); }); }); });