查询优化

This commit is contained in:
邓皓元 2019-09-23 16:10:24 +08:00
parent 16fb7b113f
commit b4e2c3cf60
4 changed files with 31 additions and 26 deletions

View File

@ -30,17 +30,7 @@ class CardExport extends AbstractExport implements FromQuery, WithHeadings, With
$this->conditions['type'] = 0; $this->conditions['type'] = 0;
// 添加卡属性匹配查找 // 添加卡属性匹配查找
$properties = app(PropertyRepository::class)->select(['company_id', 'package_id', 'product', 'package'])->get(); CardService::propConditions($this->conditions);
if (isset($this->conditions['prop_product']) && isset($this->conditions['prop_package'])) {
$this->conditions['company_id'] = $properties->where('product', $this->conditions['prop_product'])->where('package', $this->conditions['prop_package'])->pluck('company_id')->toArray();
$this->conditions['package_id'] = $properties->where('product', $this->conditions['prop_product'])->where('package', $this->conditions['prop_package'])->pluck('package_id')->toArray();
} elseif (isset($this->conditions['prop_product'])) {
$this->conditions['company_id'] = $properties->where('product', $this->conditions['prop_product'])->pluck('company_id')->toArray();
$this->conditions['package_id'] = $properties->where('product', $this->conditions['prop_product'])->pluck('package_id')->toArray();
} elseif (isset($this->conditions['prop_package'])) {
$this->conditions['company_id'] = $properties->where('package', $this->conditions['prop_package'])->pluck('company_id')->toArray();
$this->conditions['package_id'] = $properties->where('package', $this->conditions['prop_package'])->pluck('package_id')->toArray();
}
$builder = app(OrderCardPartitionRepository::class)->forceNoReset()->withConditions($this->conditions)->orderBy('sim')->applyConditions(); $builder = app(OrderCardPartitionRepository::class)->forceNoReset()->withConditions($this->conditions)->orderBy('sim')->applyConditions();

View File

@ -56,6 +56,16 @@ trait OrderCardConcern
$query->whereIn('package_id', $conditions['package_id']); $query->whereIn('package_id', $conditions['package_id']);
} }
if (isset($conditions['company_and_package_id'])) {
$conditions['company_and_package_id'] = array_wrap($conditions['company_and_package_id']);
$company_and_package_id = implode(',', array_map(function ($value) {
return "'".str_replace('"', '""', $value)."'";
}, $conditions['company_and_package_id']));
$query->whereRaw("CONCAT(company_id, '_', package_id) IN (" . $company_and_package_id . ")");
}
if (isset($conditions['carrier_operator'])) { if (isset($conditions['carrier_operator'])) {
$query->whereHas('package', function ($relation) use ($conditions) { $query->whereHas('package', function ($relation) use ($conditions) {
$relation->withTrashed()->where('carrier_operator', $conditions['carrier_operator']); $relation->withTrashed()->where('carrier_operator', $conditions['carrier_operator']);

View File

@ -16,7 +16,7 @@ class PropertyRepository extends Repository
/** /**
* 是否开启数据转化 * 是否开启数据转化
* *
* @var bool * @var bool
*/ */
protected $needTransform = false; protected $needTransform = false;
@ -29,7 +29,8 @@ class PropertyRepository extends Repository
'created_at' => 'like', 'created_at' => 'like',
]; ];
public function model() { public function model()
{
return Model::class; return Model::class;
} }
@ -59,4 +60,4 @@ class PropertyRepository extends Repository
return $this; return $this;
} }
} }

View File

@ -43,18 +43,7 @@ class CardService extends Service
$conditions['type'] = isset($conditions['card_status']) ? [0, 1, 2] : 0; $conditions['type'] = isset($conditions['card_status']) ? [0, 1, 2] : 0;
// 添加卡属性匹配查找 // 添加卡属性匹配查找
$properties = app(PropertyRepository::class)->select(['company_id', 'package_id', 'product', 'package'])->get(); $this->propConditions($conditions);
if (isset($conditions['prop_product']) && isset($conditions['prop_package'])) {
$conditions['company_id'] = $properties->where('product', $conditions['prop_product'])->where('package', $conditions['prop_package'])->pluck('company_id')->toArray();
$conditions['package_id'] = $properties->where('product', $conditions['prop_product'])->where('package', $conditions['prop_package'])->pluck('package_id')->toArray();
} elseif (isset($conditions['prop_product'])) {
$conditions['company_id'] = $properties->where('product', $conditions['prop_product'])->pluck('company_id')->toArray();
$conditions['package_id'] = $properties->where('product', $conditions['prop_product'])->pluck('package_id')->toArray();
} elseif (isset($conditions['prop_package'])) {
$conditions['company_id'] = $properties->where('package', $conditions['prop_package'])->pluck('company_id')->toArray();
$conditions['package_id'] = $properties->where('package', $conditions['prop_package'])->pluck('package_id')->toArray();
}
$select = [ $select = [
'id', 'id',
@ -190,4 +179,19 @@ class CardService extends Service
return 1; return 1;
} }
public static function propConditions(&$conditions)
{
$properties = app(PropertyRepository::class)->select(['company_id', 'package_id', 'product', 'package'])->get()->keyBy(function ($item) {
return $item['company_id'] . '_' . $item['package_id'];
});
if (isset($conditions['prop_product']) && isset($conditions['prop_package'])) {
$conditions['company_and_package_id'] = $properties->where('product', $conditions['prop_product'])->where('package', $conditions['prop_package'])->keys()->toArray();
} elseif (isset($conditions['prop_product'])) {
$conditions['company_and_package_id'] = $properties->where('product', $conditions['prop_product'])->keys()->toArray();
} elseif (isset($conditions['prop_package'])) {
$conditions['company_and_package_id'] = $properties->where('package', $conditions['prop_package'])->keys()->toArray();
}
}
} }