refactor: banner添加语言区分查询

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

View File

@@ -23,29 +23,41 @@ class BannerItem
'size/d' => 10
]);
$banner_items = SysBannerItemModel::field([
'id',
'banner_id',
'title',
'image',
'sort',
'created_at'
$banner_items = SysBannerItemModel::alias('item')
->field([
'item.id',
'item.title',
'item.image',
'item.sort',
'item.created_at',
'banner.name' => 'banner_name'
])
->with(['banner' => function ($query) {
$query->field(['id', 'name' => 'banner_name']);
}])
->withSearch(['title', 'created_at'], [
'title' => $param['title'] ?? null,
'created_at' => !empty($param['created_at']) ? explode(',', $param['created_at']) : null
])
->bannerId($param['banner_id'] ?? null)
->order(['sort' => 'asc', 'id' => 'desc'])
->join('sys_banner banner', 'banner.id = item.banner_id')
->where('banner.language_id', '=', request()->lang_id)
->where(function($query) use($param){
if (!empty($param['banner_id'])) {
$query->where('item.banner_id', '=', $param['banner_id']);
}
if (!empty($param['title'])) {
$query->where('item.title', 'like', "%{$param['title']}%");
}
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([
'list_rows' => $param['size'],
'page' => $param['page']
])
->bindAttr('banner', ['banner_name'])
->hidden(['banner_id', 'banner']);
]);
return success('获取成功', $banner_items);
}
@@ -191,22 +203,46 @@ class BannerItem
'banner_id',
'created_at'
]);
return SysBannerItemModel::withoutField([
'updated_at',
'deleted_at'
return SysBannerItemModel::alias('item')
->field([
'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) {
$query->field(['id', 'name' => 'banner_name']);
}])
->withSearch(['title', 'created_at'], [
'title' => $param['title'] ?? null,
'created_at' => !empty($param['created_att']) ? explode(',', $param['created_att']) : null,
])
->bannerId($param['banner_id'] ?? null)
->order(['sort' => 'asc', 'id' => 'desc'])
->select()
->bindAttr('banner', ['banner_name'])
->hidden(['banner_id', 'banner']);
->join('sys_banner banner', 'banner.id = item.banner_id')
->where('banner.language_id', '=', request()->lang_id)
->where(function($query) use($param){
if (!empty($param['banner_id'])) {
$query->where('item.banner_id', '=', $param['banner_id']);
}
if (!empty($param['title'])) {
$query->where('item.title', 'like', "%{$param['title']}%");
}
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'])
->select();
}
// 删除