搜索优化,url默认兼容模式

feat/task1-c-wallet
Devil 2021-03-18 13:22:26 +08:00
parent c21458ecf8
commit e4e5ad6294
3 changed files with 64 additions and 31 deletions

View File

@ -59,21 +59,46 @@ class BrandService
{ {
if(!empty($data)) if(!empty($data))
{ {
// 分类名称 // 字段列表
$cnames = []; $keys = ArrayKeys($data);
$cids = array_column($data, 'brand_category_id');
if(!empty($cids)) // 分类信息
// 获取所有品牌关联的分类数据
$category_group = [];
if(in_array('id', $keys))
{ {
$cnames = Db::name('BrandCategory')->where(['id'=>$cids])->column('name', 'id'); $category = Db::name('BrandCategoryJoin')->where(['brand_id'=>array_column($data, 'id')])->field('brand_id,brand_category_id')->select();
if(!empty($category))
{
$ids = array_unique(array_column($category, 'brand_category_id'));
$names = Db::name('BrandCategory')->where(['id'=>$ids])->column('name', 'id');
foreach($category as $c)
{
if(!array_key_exists($c['brand_id'], $category_group))
{
$category_group[$c['brand_id']]['ids'] = [];
$category_group[$c['brand_id']]['names'] = [];
}
$category_group[$c['brand_id']]['ids'][] = $c['brand_category_id'];
$category_group[$c['brand_id']]['names'][] = $names[$c['brand_category_id']];
}
}
} }
// 数处理
foreach($data as &$v) foreach($data as &$v)
{ {
// 分类名称 // 分类名称
if(isset($v['id'])) if(isset($v['id']))
{ {
$v['brand_category_ids'] = Db::name('BrandCategoryJoin')->where(['brand_id'=>$v['id']])->column('brand_category_id'); if(array_key_exists($v['id'], $category_group))
$category_name = Db::name('BrandCategory')->where(['id'=>$v['brand_category_ids']])->column('name'); {
$v['brand_category_text'] = implode('', $category_name); $v['brand_category_ids'] = $category_group[$v['id']]['ids'];
$v['brand_category_text'] = implode('', $category_group[$v['id']]['names']);
} else {
$v['brand_category_ids'] = [];
$v['brand_category_text'] = '';
}
} }
// logo // logo

View File

@ -45,7 +45,7 @@ class SearchService
// 搜索条件 // 搜索条件
$where = self::SearchWhereHandle($params); $where = self::SearchWhereHandle($params);
$base_where = $where['base']; $where_base = $where['base'];
$where_keywords = $where['keywords']; $where_keywords = $where['keywords'];
$where_screening_price = $where['screening_price']; $where_screening_price = $where['screening_price'];
@ -69,7 +69,7 @@ class SearchService
'hook_name' => $hook_name, 'hook_name' => $hook_name,
'is_backend' => true, 'is_backend' => true,
'params' => &$params, 'params' => &$params,
'base_where' => &$base_where, 'where_base' => &$where_base,
'where_keywords' => &$where_keywords, 'where_keywords' => &$where_keywords,
'where_screening_price' => &$where_screening_price, 'where_screening_price' => &$where_screening_price,
'field' => &$field, 'field' => &$field,
@ -80,7 +80,7 @@ class SearchService
]); ]);
// 获取商品总数 // 获取商品总数
$result['total'] = (int) Db::name('Goods')->alias('g')->join(['__GOODS_CATEGORY_JOIN__'=>'gci'], 'g.id=gci.goods_id')->where($base_where)->where(function($query) use($where_keywords) { $result['total'] = (int) Db::name('Goods')->alias('g')->join(['__GOODS_CATEGORY_JOIN__'=>'gci'], 'g.id=gci.goods_id')->where($where_base)->where(function($query) use($where_keywords) {
$query->whereOr($where_keywords); $query->whereOr($where_keywords);
})->where(function($query) use($where_screening_price) { })->where(function($query) use($where_screening_price) {
$query->whereOr($where_screening_price); $query->whereOr($where_screening_price);
@ -90,7 +90,7 @@ class SearchService
if($result['total'] > 0) if($result['total'] > 0)
{ {
// 查询数据 // 查询数据
$data = Db::name('Goods')->alias('g')->join(['__GOODS_CATEGORY_JOIN__'=>'gci'], 'g.id=gci.goods_id')->field($field)->where($base_where)->where(function($query) use($where_keywords) { $data = Db::name('Goods')->alias('g')->join(['__GOODS_CATEGORY_JOIN__'=>'gci'], 'g.id=gci.goods_id')->field($field)->where($where_base)->where(function($query) use($where_keywords) {
$query->whereOr($where_keywords); $query->whereOr($where_keywords);
})->where(function($query) use($where_screening_price) { })->where(function($query) use($where_screening_price) {
$query->whereOr($where_screening_price); $query->whereOr($where_screening_price);
@ -138,7 +138,7 @@ class SearchService
$keywords = explode(' ', $params['wd']); $keywords = explode(' ', $params['wd']);
foreach($keywords as $kv) foreach($keywords as $kv)
{ {
$where_keywords[] = ['g.title|g.model|g.simple_desc|g.seo_title|g.seo_keywords|g.seo_keywords', 'like', '%'.$kv.'%']; $where_keywords[] = ['g.title|g.simple_desc', 'like', '%'.$kv.'%'];
} }
} }
@ -234,7 +234,7 @@ class SearchService
} }
if(!empty($params['goods_params_values'])) if(!empty($params['goods_params_values']))
{ {
$ids = Db::name('GoodsParams')->where(['value'=>$params['goods_params_values']])->column('goods_id'); $ids = Db::name('GoodsParams')->where(['value'=>$params['goods_params_values'], 'type'=>2])->column('goods_id');
if(!empty($ids)) if(!empty($ids))
{ {
$where_base[] = ['g.id', 'in', $ids]; $where_base[] = ['g.id', 'in', $ids];
@ -364,14 +364,14 @@ class SearchService
// 搜索条件 // 搜索条件
$where = self::SearchWhereHandle($params); $where = self::SearchWhereHandle($params);
$base_where = $where['base']; $where_base = $where['base'];
$where_keywords = $where['keywords']; $where_keywords = $where['keywords'];
$where_screening_price = $where['screening_price']; $where_screening_price = $where['screening_price'];
// 一维数组、参数值去重 // 一维数组、参数值去重
if(!empty($base_where) || !empty($where_keywords) || !empty($where_screening_price)) if(!empty($where_base) || !empty($where_keywords) || !empty($where_screening_price))
{ {
$ids = Db::name('Goods')->alias('g')->join(['__GOODS_CATEGORY_JOIN__'=>'gci'], 'g.id=gci.goods_id')->where($base_where)->where(function($query) use($where_keywords) { $ids = Db::name('Goods')->alias('g')->join(['__GOODS_CATEGORY_JOIN__'=>'gci'], 'g.id=gci.goods_id')->where($where_base)->where(function($query) use($where_keywords) {
$query->whereOr($where_keywords); $query->whereOr($where_keywords);
})->where(function($query) use($where_screening_price) { })->where(function($query) use($where_screening_price) {
$query->whereOr($where_screening_price); $query->whereOr($where_screening_price);
@ -450,12 +450,15 @@ class SearchService
{ {
// 搜索条件 // 搜索条件
$where = self::SearchWhereHandle($params); $where = self::SearchWhereHandle($params);
$base_where = $where['base']; $where_base = $where['base'];
$where_keywords = $where['keywords']; $where_keywords = $where['keywords'];
$where_screening_price = $where['screening_price']; $where_screening_price = $where['screening_price'];
// 仅搜索基础参数
$where_base[] = ['gp.type', '=', 2];
// 一维数组、参数值去重 // 一维数组、参数值去重
$data = Db::name('Goods')->alias('g')->join(['__GOODS_CATEGORY_JOIN__'=>'gci'], 'g.id=gci.goods_id')->join(['__GOODS_PARAMS__'=>'gp'], 'g.id=gp.goods_id')->where($base_where)->where(function($query) use($where_keywords) { $data = Db::name('Goods')->alias('g')->join(['__GOODS_CATEGORY_JOIN__'=>'gci'], 'g.id=gci.goods_id')->join(['__GOODS_PARAMS__'=>'gp'], 'g.id=gp.goods_id')->where($where_base)->where(function($query) use($where_keywords) {
$query->whereOr($where_keywords); $query->whereOr($where_keywords);
})->where(function($query) use($where_screening_price) { })->where(function($query) use($where_screening_price) {
$query->whereOr($where_screening_price); $query->whereOr($where_screening_price);
@ -480,12 +483,12 @@ class SearchService
{ {
// 搜索条件 // 搜索条件
$where = self::SearchWhereHandle($params); $where = self::SearchWhereHandle($params);
$base_where = $where['base']; $where_base = $where['base'];
$where_keywords = $where['keywords']; $where_keywords = $where['keywords'];
$where_screening_price = $where['screening_price']; $where_screening_price = $where['screening_price'];
// 一维数组、参数值去重 // 一维数组、参数值去重
$data = Db::name('Goods')->alias('g')->join(['__GOODS_CATEGORY_JOIN__'=>'gci'], 'g.id=gci.goods_id')->join(['__GOODS_SPEC_VALUE__'=>'gsv'], 'g.id=gsv.goods_id')->where($base_where)->where(function($query) use($where_keywords) { $data = Db::name('Goods')->alias('g')->join(['__GOODS_CATEGORY_JOIN__'=>'gci'], 'g.id=gci.goods_id')->join(['__GOODS_SPEC_VALUE__'=>'gsv'], 'g.id=gsv.goods_id')->where($where_base)->where(function($query) use($where_keywords) {
$query->whereOr($where_keywords); $query->whereOr($where_keywords);
})->where(function($query) use($where_screening_price) { })->where(function($query) use($where_screening_price) {
$query->whereOr($where_screening_price); $query->whereOr($where_screening_price);

File diff suppressed because one or more lines are too long