提交 e4e5ad62 编写于 作者: D Devil

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

上级 c21458ec
......@@ -59,21 +59,46 @@ class BrandService
{
if(!empty($data))
{
// 分类名称
$cnames = [];
$cids = array_column($data, 'brand_category_id');
if(!empty($cids))
// 字段列表
$keys = ArrayKeys($data);
// 分类信息
// 获取所有品牌关联的分类数据
$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)
{
// 分类名称
if(isset($v['id']))
{
$v['brand_category_ids'] = Db::name('BrandCategoryJoin')->where(['brand_id'=>$v['id']])->column('brand_category_id');
$category_name = Db::name('BrandCategory')->where(['id'=>$v['brand_category_ids']])->column('name');
$v['brand_category_text'] = implode(',', $category_name);
if(array_key_exists($v['id'], $category_group))
{
$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
......
......@@ -45,7 +45,7 @@ class SearchService
// 搜索条件
$where = self::SearchWhereHandle($params);
$base_where = $where['base'];
$where_base = $where['base'];
$where_keywords = $where['keywords'];
$where_screening_price = $where['screening_price'];
......@@ -69,7 +69,7 @@ class SearchService
'hook_name' => $hook_name,
'is_backend' => true,
'params' => &$params,
'base_where' => &$base_where,
'where_base' => &$where_base,
'where_keywords' => &$where_keywords,
'where_screening_price' => &$where_screening_price,
'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);
})->where(function($query) use($where_screening_price) {
$query->whereOr($where_screening_price);
......@@ -90,7 +90,7 @@ class SearchService
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);
})->where(function($query) use($where_screening_price) {
$query->whereOr($where_screening_price);
......@@ -138,7 +138,7 @@ class SearchService
$keywords = explode(' ', $params['wd']);
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']))
{
$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))
{
$where_base[] = ['g.id', 'in', $ids];
......@@ -364,14 +364,14 @@ class SearchService
// 搜索条件
$where = self::SearchWhereHandle($params);
$base_where = $where['base'];
$where_base = $where['base'];
$where_keywords = $where['keywords'];
$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);
})->where(function($query) use($where_screening_price) {
$query->whereOr($where_screening_price);
......@@ -450,12 +450,15 @@ class SearchService
{
// 搜索条件
$where = self::SearchWhereHandle($params);
$base_where = $where['base'];
$where_base = $where['base'];
$where_keywords = $where['keywords'];
$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);
})->where(function($query) use($where_screening_price) {
$query->whereOr($where_screening_price);
......@@ -480,12 +483,12 @@ class SearchService
{
// 搜索条件
$where = self::SearchWhereHandle($params);
$base_where = $where['base'];
$where_base = $where['base'];
$where_keywords = $where['keywords'];
$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);
})->where(function($query) use($where_screening_price) {
$query->whereOr($where_screening_price);
......
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册