From 08d19b03e737f2bb7e964ece37c45172837f6f8c Mon Sep 17 00:00:00 2001 From: denghy Date: Mon, 16 Dec 2019 17:15:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=B6=E9=97=B4=E7=AD=9B=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Concerns/OrderCardConcern.php | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/app/Domains/Virtual/Repositories/Concerns/OrderCardConcern.php b/app/Domains/Virtual/Repositories/Concerns/OrderCardConcern.php index 147cfdf3..6b496154 100644 --- a/app/Domains/Virtual/Repositories/Concerns/OrderCardConcern.php +++ b/app/Domains/Virtual/Repositories/Concerns/OrderCardConcern.php @@ -101,19 +101,39 @@ trait OrderCardConcern } if (isset($conditions['service_start_starttime'])) { - $query->where('service_start_at', '>=', Carbon::parse($conditions['service_start_starttime'])); + $date = Carbon::parse($conditions['service_start_starttime']); + $havingRaw = sprintf("sim in (SELECT sim FROM virtual_order_cards_partition GROUP BY sim HAVING MIN(service_start_at) >= '%s')", $date); + $this->model = $this->model->whereNotNull('service_start_at') + ->whereRaw($havingRaw); + + // $query->where('service_start_at', '>=', Carbon::parse($conditions['service_start_starttime'])); } if (isset($conditions['service_start_endtime'])) { - $query->where('service_start_at', '<=', Carbon::parse($conditions['service_start_endtime'])); + $date = Carbon::parse($conditions['service_start_starttime']); + $havingRaw = sprintf("sim in (SELECT sim FROM virtual_order_cards_partition GROUP BY sim HAVING MIN(service_start_at) <= '%s')", $date); + $this->model = $this->model->whereNotNull('service_start_at') + ->whereRaw($havingRaw); + + // $query->where('service_start_at', '<=', Carbon::parse($conditions['service_start_endtime'])); } if (isset($conditions['service_end_starttime'])) { - $query->where('service_end_at', '>=', Carbon::parse($conditions['service_end_starttime'])); + $date = Carbon::parse($conditions['service_end_starttime']); + $havingRaw = sprintf("sim in (SELECT sim FROM virtual_order_cards_partition GROUP BY sim HAVING MAX(service_end_at) >= '%s')", $date); + $this->model = $this->model->whereNotNull('service_start_at') + ->whereRaw($havingRaw); + + // $query->where('service_end_at', '>=', Carbon::parse($conditions['service_end_starttime'])); } if (isset($conditions['service_end_endtime'])) { - $query->where('service_end_at', '<=', Carbon::parse($conditions['service_end_endtime'])); + $date = Carbon::parse($conditions['service_end_starttime']); + $havingRaw = sprintf("sim in (SELECT sim FROM virtual_order_cards_partition GROUP BY sim HAVING MAX(service_end_at) <= '%s')", $date); + $this->model = $this->model->whereNotNull('service_start_at') + ->whereRaw($havingRaw); + + // $query->where('service_end_at', '<=', Carbon::parse($conditions['service_end_endtime'])); } if (isset($conditions['refunded_starttime'])) {