157 lines
5.6 KiB
PHP
157 lines
5.6 KiB
PHP
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
namespace App\Model;
|
||
|
||
|
||
|
||
use Carbon\Carbon;
|
||
use Hyperf\Database\Model\Collection;
|
||
use Hyperf\Database\Model\Relations\HasMany;
|
||
use Hyperf\Database\Model\Relations\HasOne;
|
||
use Hyperf\DbConnection\Db;
|
||
use Hyperf\Snowflake\Concern\Snowflake;
|
||
|
||
/**
|
||
* @property int $article_id 主键id
|
||
* @property string $article_title 文章标题
|
||
* @property int $article_status 文章状态(1:正常 2:禁用)
|
||
* @property int $is_top 是否置顶(0:否 1:是)
|
||
* @property string $article_image 文章图片(1张)
|
||
* @property int $source_id 文章来源id
|
||
* @property string $article_url 文章地址
|
||
* @property Carbon $created_at 创建时间
|
||
* @property Carbon $updated_at 修改时间
|
||
*/
|
||
class ArticleScience extends Model
|
||
{
|
||
use Snowflake;
|
||
|
||
/**
|
||
* The table associated with the model.
|
||
*/
|
||
protected ?string $table = 'article_science';
|
||
|
||
/**
|
||
* The attributes that are mass assignable.
|
||
*/
|
||
protected array $fillable = ['article_id', 'article_title', 'article_status', 'is_top', 'article_image', 'source_id', 'article_url', 'created_at', 'updated_at'];
|
||
|
||
protected string $primaryKey = "article_id";
|
||
|
||
/**
|
||
* 关联来源
|
||
*/
|
||
public function ArticleScienceSource(): HasOne
|
||
{
|
||
return $this->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;
|
||
}
|
||
|
||
}
|