hasOne(ArticleScienceSource::class, 'source_id', 'source_id'); } /** * 关联分类 * @return HasMany */ public function ArticleScienceClass(): HasMany { return $this->hasMany(ArticleScienceClass::class, "article_id", "article_id"); } /** * 获取信息-单条 * @param array $params * @param array $fields * @return object|null */ public static function getOne(array $params, array $fields = ['*']): object|null { return self::where($params)->first($fields); } /** * 获取数据-多 * @param array $params * @param array $fields * @return Collection|array */ public static function getList(array $params = [], array $fields = ['*']): Collection|array { return self::where($params)->get($fields); } /** * 获取列表-分页 * @param string $keyword * @param array $article_science_params 搜索条件 * @param array $article_science_class_params 分类搜索条件 * @param array $fields * @param int|null $page * @param int|null $per_page * @return array */ public static function getArticleSciencePage(string $keyword = "", array $article_science_params = [], array $article_science_class_params = [], array $fields = ["*"], int $page = null, ?int $per_page = 10): 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); }); $result = $query->orderBy("is_top","desc")->orderBy("created_at","desc")->paginate($per_page, $fields, "page", $page); $data = array(); $data['current_page'] = $result->currentPage();// 当前页码 $data['total'] = $result->total();//数据总数 $data['data'] = $result->items();//数据 $data['per_page'] = $result->perPage();//每页个数 $data['last_page'] = $result->lastPage();//最后一页 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->orderBy("is_top","desc")->orderBy("created_at","desc")->limit($limit)->get($fields); return $data; } }