问题说明:门店平台商品分类筛选后列表头部数据显示异常
修改文件:app\dao\product\product\StoreProductDao
修改方法:getCount()
public function getCount(array $where)
{
if (!empty($where['cate_id']) && is_array($where['cate_id']) || isset($where['store_cate_id']) && !empty($where['store_cate_id']) && is_array($where['store_cate_id'])) {
if(isset($where['cate_id']) && empty($where['cate_id'])) unset($where['cate_id']);
if(isset($where['store_cate_id']) && empty($where['store_cate_id'])) unset($where['store_cate_id']);
if (isset($where['cate_id']) && is_array($where['cate_id']) && isset($where['store_cate_id']) && is_array($where['store_cate_id'])) {
$cate_id = array_merge($where['cate_id'], $where['store_cate_id']);
} elseif (isset($where['cate_id']) && !isset($where['store_cate_id'])) {
$cate_id = $where['cate_id'] ?? [];
} else {
$cate_id = $where['store_cate_id'] ?? [];
}
return $this->getModel()->alias('a')
->join('store_product_relation r', 'r.product_id = a.id')
->when(isset($where['unit_name']) && $where['unit_name'] !== '', function ($query) use ($where) {
$query->where('a.unit_name', $where['unit_name']);
})->when(isset($where['ids']) && $where['ids'], function ($query) use ($where) {
if (!isset($where['type'])) $query->where('a.id', 'in', $where['ids']);
})->when(isset($where['not_ids']) && $where['not_ids'], function ($query) use ($where) {
$query->whereNotIn('a.id', $where['not_ids']);
})->when(isset($where['pid']) && $where['pid'] !== '', function ($query) use ($where) {
$query->where('a.pid', $where['pid']);
})->when(isset($where['relation_id']) && $where['relation_id'] !== '', function ($query) use ($where) {
$query->where('a.relation_id', $where['relation_id']);
})->when(isset($where['status']) && '' !== $where['status'], function ($query) use ($where) {
$value = $where['status'];
switch ((int)$value) {
case -2://强制下架
$query->where(['a.is_verify' => -2]);
break;
case -1://审核未通过
$query->where(['a.is_verify' => -1]);
break;
case 0://待审核
$query->where(['a.is_verify' => 0, 'a.is_del' => 0]);
break;
case 1:
$query->where(['a.is_show' => 1, 'a.is_del' => 0]);
break;
case 2:
$query->where(['a.is_show' => 0, 'a.is_del' => 0]);
break;
case 3:
$query->where(['a.is_del' => 0]);
break;
case 4:
$query->where(['a.is_show' => 1, 'a.is_del' => 0, 'a.is_verify' => 1])->where(function ($query) {
$query->whereOr('a.stock', 0)->whereOr('a.is_sold', 1);
});
break;
case 5:
// if (isset($data['store_stock']) && $data['store_stock']) {
// $store_stock = $data['store_stock'];
// $query->where(['a.is_show' => 1, 'a.is_del' => 0, 'a.is_verify' => 1, 'a.is_police' => 1])->where('a.stock', '<=', $store_stock)->where('a.stock', '>', 0);
// } else {
$query->where(['a.is_show' => 1, 'a.is_del' => 0, 'a.is_verify' => 1, 'a.is_police' => 1])->where('a.stock', '>=', 0);
// }
break;
case 6:
$query->where(['a.is_del' => 1]);
break;
case 7://回收站 & 下架商品
$query->where(function ($q) {
$q->where(['a.is_del' => 1])->whereOr('a.is_show', 0);
});
break;
};
})->when(isset($where['pids']) && $where['pids'], function ($query) use ($where) {
if ((isset($where['priceOrder']) && $where['priceOrder'] != '') || (isset($where['salesOrder']) && $where['salesOrder'] != '')) {
$query->whereIn('a.pid', $where['pids']);
} else {
$query->whereIn('a.pid', $where['pids'])->orderField('pid', $where['pids'], 'asc');
}
})->when(isset($where['not_pids']) && $where['not_pids'], function ($query) use ($where, $cate_id) {
$query->whereNotIn('a.pid', $where['not_pids']);
})->where('r.type', 1)
->where('r.relation_id', 'IN', $cate_id)
->group('a.id')
->count('a.id');
var_dump();
} else {
return $this->search($where)
->when(isset($where['unit_name']) && $where['unit_name'] !== '', function ($query) use ($where) {
$query->where('unit_name', $where['unit_name']);
})->when(isset($where['ids']) && $where['ids'], function ($query) use ($where) {
if (!isset($where['type'])) $query->where('id', 'in', $where['ids']);
})->when(isset($where['not_ids']) && $where['not_ids'], function ($query) use ($where) {
$query->whereNotIn('id', $where['not_ids']);
})->when(isset($where['pids']) && $where['pids'], function ($query) use ($where) {
if ((isset($where['priceOrder']) && $where['priceOrder'] != '') || (isset($where['salesOrder']) && $where['salesOrder'] != '')) {
$query->whereIn('pid', $where['pids']);
} else {
$query->whereIn('pid', $where['pids'])->orderField('pid', $where['pids'], 'asc');
}
})->when(isset($where['not_pids']) && $where['not_pids'], function ($query) use ($where) {
$query->whereNotIn('pid', $where['not_pids']);
})->count();
}
}