查询优化

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;
// 添加卡属性匹配查找
$properties = app(PropertyRepository::class)->select(['company_id', 'package_id', 'product', 'package'])->get();
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();
}
CardService::propConditions($this->conditions);
$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']);
}
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'])) {
$query->whereHas('package', function ($relation) use ($conditions) {
$relation->withTrashed()->where('carrier_operator', $conditions['carrier_operator']);

View File

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

View File

@ -43,18 +43,7 @@ class CardService extends Service
$conditions['type'] = isset($conditions['card_status']) ? [0, 1, 2] : 0;
// 添加卡属性匹配查找
$properties = app(PropertyRepository::class)->select(['company_id', 'package_id', 'product', 'package'])->get();
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();
}
$this->propConditions($conditions);
$select = [
'id',
@ -190,4 +179,19 @@ class CardService extends Service
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();
}
}
}