request = $request; $this->params = $request->all(); $this->array_filter = array_filter($this->request->only($this->filters)); } public function apply($builder) { $this->queryBuilder = $builder; $this->afterApply(); foreach ($this->array_filter as $filter => $value) { if (method_exists($this, $filter)) { $this->$filter($value, $this->queryBuilder); } } $this->beforeApply(); return $this->queryBuilder; } public function afterApply() { if(isset($this->params['data'])) $this->id(explode(',',$this->params['data'])); } public function beforeApply() { if ($this->orderQuery) { $this->queryBuilder->whereIn('order_id',$this->getOrderQuery()); } } public function getOrderQuery() { if (!$this->orderQuery){ $this->orderQuery = Order::query()->select('id'); } return $this->orderQuery; } public function id($id) { if(is_array($id))$this->queryBuilder->whereIn('work_orders.id',$id); else $this->queryBuilder->where('work_orders.id',$id); } // 创建开始时间 public function created_at_start($create_at_start) { $this->queryBuilder->where('work_orders.created_at','>=',$create_at_start); } // 创建结束时间 public function created_at_end($created_at_end) { $this->queryBuilder->where('work_orders.created_at','<=',$created_at_end); } // 审核开始时间 public function review_at_start($review_at_start) { $this->queryBuilder->where('work_orders.review_at','>=',$review_at_start); } // 审核结束时间 public function review_at_end($review_at_end) { $this->queryBuilder->where('work_orders.review_at','<=',$review_at_end); } // 创建人 public function creator($id) { if (is_array($id)) $this->queryBuilder->whereIn('work_orders.creator_id',$id); else $this->queryBuilder->where('work_orders.creator_id',$id); } // 审核人 public function reviewer($id) { if (is_array($id)) $this->queryBuilder->whereIn('work_orders.reviewer_id',$id); else $this->queryBuilder->where('work_orders.reviewer_id',$id); } // 类型 public function word_order_types($word_order_types) { if(!$this->workOrderTypeQuery) $this->workOrderTypeQuery = WorkOrder::query()->select('id'); if (is_array($word_order_types)) $this->workOrderTypeQuery->whereIn('id',$word_order_types); else $this->workOrderTypeQuery->where('id',$word_order_types); } public function logistic($logistic) { $orderQuery = $this->getOrderQuery()->whereIn('id',WorkOrder::query()->select('order_id')); $this->searchWay($orderQuery,$logistic,'logistic_id'); } }