query('size', $request->query('per_page', 15)))); $page = max(1, (int) $request->query('page', 1)); /** @var string|null $bizDate query `business_date` 或旧的 `date` */ $bizDate = $request->query('business_date') ?? $request->query('date'); $query = Draw::query() ->whereIn('status', DrawResultViewService::publishedDrawStatuses()) ->where('current_result_version', '>', 0) ->whereNotNull('draw_time') ->whereExists(function ($sub): void { $sub->selectRaw('1') ->from((new DrawResultBatch)->getTable()) ->whereColumn('draw_id', 'draws.id') ->whereColumn('result_version', 'draws.current_result_version') ->where('status', DrawResultBatchStatus::Published->value); }); if (is_string($bizDate) && preg_match('/^\d{4}-\d{2}-\d{2}$/', $bizDate)) { $query->whereDate('business_date', $bizDate); } /** @var LengthAwarePaginator $paginator */ $paginator = $query ->orderByDesc('draw_time') ->paginate(perPage: $perPage, columns: ['*'], pageName: 'page', page: $page); $decorated = $this->viewer->decoratePaginator($paginator); return ApiResponse::success([ 'items' => $decorated->items(), 'total' => $decorated->total(), 'page' => $decorated->currentPage(), 'per_page' => $decorated->perPage(), 'last_page' => $decorated->lastPage(), ]); } }