query(); if (($where['keyword'] ?? '') !== '') { $keyword = '%' . $where['keyword'] . '%'; $query->where(function (Builder $builder) use ($keyword) { $builder->where('order_no', 'like', $keyword) ->orWhere('user_code', 'like', $keyword) ->orWhere('reporter', 'like', $keyword) ->orWhere('type_name', 'like', $keyword) ->orWhere('reason_name', 'like', $keyword) ->orWhere('issue_name', 'like', $keyword) ->orWhere('remark', 'like', $keyword); }); } foreach (['type_code', 'reason_code', 'issue_code', 'status'] as $field) { if (($where[$field] ?? '') !== '') { $query->where($field, $where[$field]); } } if (!empty($where['reported_at_range']) && is_array($where['reported_at_range']) && count($where['reported_at_range']) === 2) { $query->whereBetween('reported_at', [ strtotime((string) $where['reported_at_range'][0] . ' 00:00:00'), strtotime((string) $where['reported_at_range'][1] . ' 23:59:59'), ]); } return $query; } }