refactor: banner添加语言区分查询

This commit is contained in:
2025-03-26 10:56:14 +08:00
parent e8803cd442
commit a452c6f3e0
3 changed files with 78 additions and 34 deletions

View File

@@ -31,6 +31,7 @@ class Banner
->withSearch(['name'], [ ->withSearch(['name'], [
'name' => $param['name'] ?? null 'name' => $param['name'] ?? null
]) ])
->language(request()->lang_id)
->order(['sort' => 'asc', 'id' => 'desc']) ->order(['sort' => 'asc', 'id' => 'desc'])
->paginate([ ->paginate([
'list_rows' => $param['size'], 'list_rows' => $param['size'],

View File

@@ -23,29 +23,41 @@ class BannerItem
'size/d' => 10 'size/d' => 10
]); ]);
$banner_items = SysBannerItemModel::field([ $banner_items = SysBannerItemModel::alias('item')
'id', ->field([
'banner_id', 'item.id',
'title', 'item.title',
'image', 'item.image',
'sort', 'item.sort',
'created_at' 'item.created_at',
'banner.name' => 'banner_name'
]) ])
->with(['banner' => function ($query) { ->join('sys_banner banner', 'banner.id = item.banner_id')
$query->field(['id', 'name' => 'banner_name']); ->where('banner.language_id', '=', request()->lang_id)
}]) ->where(function($query) use($param){
->withSearch(['title', 'created_at'], [ if (!empty($param['banner_id'])) {
'title' => $param['title'] ?? null, $query->where('item.banner_id', '=', $param['banner_id']);
'created_at' => !empty($param['created_at']) ? explode(',', $param['created_at']) : null }
]) if (!empty($param['title'])) {
->bannerId($param['banner_id'] ?? null) $query->where('item.title', 'like', "%{$param['title']}%");
->order(['sort' => 'asc', 'id' => 'desc']) }
if (!empty($param['created_at'])) {
$value = explode(',', $param['created_at']);
if (count($value) > 1) {
if ($value[1] == $value[0]) {
$value[1] = date('Y-m-d 23:59:59', strtotime($value[1]));
}
$query->whereBetweenTime('item.created_at', $value[0], $value[1]);
} else {
$query->whereTime('item.created_at', '>=', $value[0]);
}
}
})
->order(['item.sort' => 'asc', 'item.id' => 'desc'])
->paginate([ ->paginate([
'list_rows' => $param['size'], 'list_rows' => $param['size'],
'page' => $param['page'] 'page' => $param['page']
]) ]);
->bindAttr('banner', ['banner_name'])
->hidden(['banner_id', 'banner']);
return success('获取成功', $banner_items); return success('获取成功', $banner_items);
} }
@@ -191,22 +203,46 @@ class BannerItem
'banner_id', 'banner_id',
'created_at' 'created_at'
]); ]);
return SysBannerItemModel::withoutField([ return SysBannerItemModel::alias('item')
'updated_at', ->field([
'deleted_at' 'item.id',
'banner.name' => 'banner_name',
'item.title',
'item.title_txt_color',
'item.desc',
'item.desc_txt_color',
'item.type',
'item.image',
'item.video',
'item.link_to',
'item.link',
'item.sort' ,
'item.status',
'item.created_at'
]) ])
->with(['banner' => function ($query) { ->join('sys_banner banner', 'banner.id = item.banner_id')
$query->field(['id', 'name' => 'banner_name']); ->where('banner.language_id', '=', request()->lang_id)
}]) ->where(function($query) use($param){
->withSearch(['title', 'created_at'], [ if (!empty($param['banner_id'])) {
'title' => $param['title'] ?? null, $query->where('item.banner_id', '=', $param['banner_id']);
'created_at' => !empty($param['created_att']) ? explode(',', $param['created_att']) : null, }
]) if (!empty($param['title'])) {
->bannerId($param['banner_id'] ?? null) $query->where('item.title', 'like', "%{$param['title']}%");
->order(['sort' => 'asc', 'id' => 'desc']) }
->select() if (!empty($param['created_at'])) {
->bindAttr('banner', ['banner_name']) $value = explode(',', $param['created_at']);
->hidden(['banner_id', 'banner']); if (count($value) > 1) {
if ($value[1] == $value[0]) {
$value[1] = date('Y-m-d 23:59:59', strtotime($value[1]));
}
$query->whereBetweenTime('item.created_at', $value[0], $value[1]);
} else {
$query->whereTime('item.created_at', '>=', $value[0]);
}
}
})
->order(['item.sort' => 'asc', 'item.id' => 'desc'])
->select();
} }
// 删除 // 删除

View File

@@ -17,6 +17,13 @@ class SysBannerModel extends SysBannerBaseModel
// 软删除字段 // 软删除字段
protected $deleteTime = 'deleted_at'; protected $deleteTime = 'deleted_at';
// 按语言查询
public function scopeLanguage($query, $value)
{
if (is_null($value)) return;
$query->where('language_id', $value);
}
// 按名称搜索 // 按名称搜索
public function searchNameAttr($query, $value, $data) public function searchNameAttr($query, $value, $data)
{ {