refactor: banner添加语言区分查询
This commit is contained in:
@@ -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'],
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 删除
|
// 删除
|
||||||
|
|||||||
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user