πExport all Answers from tickets
I was wondering if we can add a way to export all answers from questions asked to the attendee during checkout?
The answers should be included when you export the CSV on the Attendees admin page. Are you not seeing them?
It kept giving me an error, but I will double check if the last commit fixes it. thanks
For me too, when try to export the answers, I get a 500 status error:
POST https://evento.potilivre.org/api/events/3/questions/answers/export
500
And when export from Attendees, I just have the default headers:
ID First Name Last Name Email Status Is Checked In Checked In At Product ID Product Name Event ID Public ID Short ID Created Date Last Updated Date Notes
Note: My questions are set to be required and I tested that users just complete the purchase when answers the questions.
Testing the postgres, the answers are storaged in SELECT * FROM question_answers;
docker compose logs all-in-one
all-in-one | ::1 - 22/Mar/2025:14:21:21 +0000 "HEAD /index.php/events/3/questions/answers/export" 302
all-in-one | 10.0.0.121 - - [22/Mar/2025:14:21:22 +0000] "HEAD /auth/login HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36"
all-in-one | 10.0.0.121 - - [22/Mar/2025:14:24:24 +0000] "GET / HTTP/1.1" 200 1314 "-" "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36"
all-in-one | [2025-03-22 14:41:36] production.ERROR: SQLSTATE[22023]: Invalid parameter value: 7 ERROR: invalid value for parameter "client_encoding": "utf8mb4" (Connection: mysql, SQL: insert into "job_batches" ("id", "name", "total_jobs", "pending_jobs", "failed_jobs", "failed_job_ids", "options", "created_at", "cancelled_at", "finished_at") values (9e7e5639-c8e6-4fc7-9543-3cb34cd5a549, Export Questions for Event #3, 0, 0, 0, [], YTowOnt9, 1742654496, ?, ?)) {"userId":1,"exception":"[object] (Illuminate\\Database\\QueryException(code: 22023): SQLSTATE[22023]: Invalid parameter value: 7 ERROR: invalid value for parameter \"client_encoding\": \"utf8mb4\" (Connection: mysql, SQL: insert into \"job_batches\" (\"id\", \"name\", \"total_jobs\", \"pending_jobs\", \"failed_jobs\", \"failed_job_ids\", \"options\", \"created_at\", \"cancelled_at\", \"finished_at\") values (9e7e5639-c8e6-4fc7-9543-3cb34cd5a549, Export Questions for Event #3, 0, 0, 0, [], YTowOnt9, 1742654496, ?, ?)) at /app/backend/vendor/laravel/framework/src/Illuminate/Database/Connection.php:813)
all-in-one | [stacktrace]
all-in-one | #0 /app/backend/vendor/laravel/framework/src/Illuminate/Database/Connection.php(767): Illuminate\\Database\\Connection->runQueryCallback()
all-in-one | #1 /app/backend/vendor/laravel/framework/src/Illuminate/Database/Connection.php(560): Illuminate\\Database\\Connection->run()
all-in-one | #2 /app/backend/vendor/laravel/framework/src/Illuminate/Database/Connection.php(524): Illuminate\\Database\\Connection->statement()
all-in-one | #3 /app/backend/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3509): Illuminate\\Database\\Connection->insert()
all-in-one | #4 /app/backend/vendor/laravel/framework/src/Illuminate/Bus/DatabaseBatchRepository.php(99): Illuminate\\Database\\Query\\Builder->insert()
all-in-one | #5 /app/backend/vendor/laravel/framework/src/Illuminate/Bus/PendingBatch.php(403): Illuminate\\Bus\\DatabaseBatchRepository->store()
all-in-one | #6 /app/backend/vendor/laravel/framework/src/Illuminate/Bus/PendingBatch.php(310): Illuminate\\Bus\\PendingBatch->store()
all-in-one | #7 /app/backend/app/Services/Infrastructure/Jobs/JobPollingService.php(18): Illuminate\\Bus\\PendingBatch->dispatch()
all-in-one | #8 /app/backend/app/Http/Actions/Questions/ExportQuestionAnswersAction.php(49): HiEvents\\Services\\Infrastructure\\Jobs\\JobPollingService->startJob()
all-in-one | #9 /app/backend/app/Http/Actions/Questions/ExportQuestionAnswersAction.php(30): HiEvents\\Http\\Actions\\Questions\\ExportQuestionAnswersAction->startNewExportJob()
all-in-one | #10 /app/backend/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): HiEvents\\Http\\Actions\\Questions\\ExportQuestionAnswersAction->__invoke()
all-in-one | #11 /app/backend/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\\Routing\\Controller->callAction()
all-in-one | #12 /app/backend/vendor/laravel/framework/src/Illuminate/Routing/Route.php(260): Illuminate\\Routing\\ControllerDispatcher->dispatch()
all-in-one | #13 /app/backend/vendor/laravel/framework/src/Illuminate/Routing/Route.php(206): Illuminate\\Routing\\Route->runController()
all-in-one | #14 /app/backend/vendor/laravel/framework/src/Illuminate/Routing/Router.php(806): Illuminate\\Routing\\Route->run()
all-in-one | #15 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()
all-in-one | #16 /app/backend/app/Http/Middleware/SetUserLocaleMiddleware.php(23): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #17 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): HiEvents\\Http\\Middleware\\SetUserLocaleMiddleware->handle()
all-in-one | #18 /app/backend/app/Http/Middleware/SetAccountContext.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #19 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): HiEvents\\Http\\Middleware\\SetAccountContext->handle()
all-in-one | #20 /app/backend/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #21 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle()
all-in-one | #22 /app/backend/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(159): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #23 /app/backend/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(125): Illuminate\\Routing\\Middleware\\ThrottleRequests->handleRequest()
all-in-one | #24 /app/backend/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(87): Illuminate\\Routing\\Middleware\\ThrottleRequests->handleRequestUsingNamedLimiter()
all-in-one | #25 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Routing\\Middleware\\ThrottleRequests->handle()
all-in-one | #26 /app/backend/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(64): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #27 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Auth\\Middleware\\Authenticate->handle()
all-in-one | #28 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #29 /app/backend/vendor/laravel/framework/src/Illuminate/Routing/Router.php(805): Illuminate\\Pipeline\\Pipeline->then()
all-in-one | #30 /app/backend/vendor/laravel/framework/src/Illuminate/Routing/Router.php(784): Illuminate\\Routing\\Router->runRouteWithinStack()
all-in-one | #31 /app/backend/vendor/laravel/framework/src/Illuminate/Routing/Router.php(748): Illuminate\\Routing\\Router->runRoute()
all-in-one | #32 /app/backend/vendor/laravel/framework/src/Illuminate/Routing/Router.php(737): Illuminate\\Routing\\Router->dispatchToRoute()
all-in-one | #33 /app/backend/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch()
all-in-one | #34 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
all-in-one | #35 /app/backend/vendor/laravel/vapor-core/src/Http/Middleware/ServeStaticAssets.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #36 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Laravel\\Vapor\\Http\\Middleware\\ServeStaticAssets->handle()
all-in-one | #37 /app/backend/app/Http/Middleware/VaporBinaryResponseMiddleware.php(14): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #38 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): HiEvents\\Http\\Middleware\\VaporBinaryResponseMiddleware->handle()
all-in-one | #39 /app/backend/app/Http/Middleware/HandleDeprecatedTimezones.php(25): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #40 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): HiEvents\\Http\\Middleware\\HandleDeprecatedTimezones->handle()
all-in-one | #41 /app/backend/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #42 /app/backend/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
all-in-one | #43 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()
all-in-one | #44 /app/backend/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #45 /app/backend/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(50): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
all-in-one | #46 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
all-in-one | #47 /app/backend/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #48 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Http\\Middleware\\ValidatePostSize->handle()
all-in-one | #49 /app/backend/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(110): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #50 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
all-in-one | #51 /app/backend/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(62): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #52 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Http\\Middleware\\HandleCors->handle()
all-in-one | #53 /app/backend/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(57): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #54 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Http\\Middleware\\TrustProxies->handle()
all-in-one | #55 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #56 /app/backend/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then()
all-in-one | #57 /app/backend/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
all-in-one | #58 /app/backend/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle()
all-in-one | #59 {main}
all-in-one | [previous exception] [object] (PDOException(code: 22023): SQLSTATE[22023]: Invalid parameter value: 7 ERROR: invalid value for parameter \"client_encoding\": \"utf8mb4\" at /app/backend/vendor/laravel/framework/src/Illuminate/Database/Connectors/PostgresConnector.php:87)
all-in-one | [stacktrace]
all-in-one | #0 /app/backend/vendor/laravel/framework/src/Illuminate/Database/Connectors/PostgresConnector.php(87): PDOStatement->execute()
all-in-one | #1 /app/backend/vendor/laravel/framework/src/Illuminate/Database/Connectors/PostgresConnector.php(41): Illuminate\\Database\\Connectors\\PostgresConnector->configureEncoding()
all-in-one | #2 /app/backend/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php(185): Illuminate\\Database\\Connectors\\PostgresConnector->connect()
all-in-one | #3 [internal function]: Illuminate\\Database\\Connectors\\ConnectionFactory->Illuminate\\Database\\Connectors\\{closure}()
all-in-one | #4 /app/backend/vendor/laravel/framework/src/Illuminate/Database/Connection.php(1219): call_user_func()
all-in-one | #5 /app/backend/vendor/laravel/framework/src/Illuminate/Database/Connection.php(565): Illuminate\\Database\\Connection->getPdo()
all-in-one | #6 /app/backend/vendor/laravel/framework/src/Illuminate/Database/Connection.php(800): Illuminate\\Database\\Connection->Illuminate\\Database\\{closure}()
all-in-one | #7 /app/backend/vendor/laravel/framework/src/Illuminate/Database/Connection.php(767): Illuminate\\Database\\Connection->runQueryCallback()
all-in-one | #8 /app/backend/vendor/laravel/framework/src/Illuminate/Database/Connection.php(560): Illuminate\\Database\\Connection->run()
all-in-one | #9 /app/backend/vendor/laravel/framework/src/Illuminate/Database/Connection.php(524): Illuminate\\Database\\Connection->statement()
all-in-one | #10 /app/backend/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3509): Illuminate\\Database\\Connection->insert()
all-in-one | #11 /app/backend/vendor/laravel/framework/src/Illuminate/Bus/DatabaseBatchRepository.php(99): Illuminate\\Database\\Query\\Builder->insert()
all-in-one | #12 /app/backend/vendor/laravel/framework/src/Illuminate/Bus/PendingBatch.php(403): Illuminate\\Bus\\DatabaseBatchRepository->store()
all-in-one | #13 /app/backend/vendor/laravel/framework/src/Illuminate/Bus/PendingBatch.php(310): Illuminate\\Bus\\PendingBatch->store()
all-in-one | #14 /app/backend/app/Services/Infrastructure/Jobs/JobPollingService.php(18): Illuminate\\Bus\\PendingBatch->dispatch()
all-in-one | #15 /app/backend/app/Http/Actions/Questions/ExportQuestionAnswersAction.php(49): HiEvents\\Services\\Infrastructure\\Jobs\\JobPollingService->startJob()
all-in-one | #16 /app/backend/app/Http/Actions/Questions/ExportQuestionAnswersAction.php(30): HiEvents\\Http\\Actions\\Questions\\ExportQuestionAnswersAction->startNewExportJob()
all-in-one | #17 /app/backend/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): HiEvents\\Http\\Actions\\Questions\\ExportQuestionAnswersAction->__invoke()
all-in-one | #18 /app/backend/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\\Routing\\Controller->callAction()
all-in-one | #19 /app/backend/vendor/laravel/framework/src/Illuminate/Routing/Route.php(260): Illuminate\\Routing\\ControllerDispatcher->dispatch()
all-in-one | #20 /app/backend/vendor/laravel/framework/src/Illuminate/Routing/Route.php(206): Illuminate\\Routing\\Route->runController()
all-in-one | #21 /app/backend/vendor/laravel/framework/src/Illuminate/Routing/Router.php(806): Illuminate\\Routing\\Route->run()
all-in-one | #22 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()
all-in-one | #23 /app/backend/app/Http/Middleware/SetUserLocaleMiddleware.php(23): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #24 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): HiEvents\\Http\\Middleware\\SetUserLocaleMiddleware->handle()
all-in-one | #25 /app/backend/app/Http/Middleware/SetAccountContext.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #26 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): HiEvents\\Http\\Middleware\\SetAccountContext->handle()
all-in-one | #27 /app/backend/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #28 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle()
all-in-one | #29 /app/backend/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(159): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #30 /app/backend/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(125): Illuminate\\Routing\\Middleware\\ThrottleRequests->handleRequest()
all-in-one | #31 /app/backend/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(87): Illuminate\\Routing\\Middleware\\ThrottleRequests->handleRequestUsingNamedLimiter()
all-in-one | #32 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Routing\\Middleware\\ThrottleRequests->handle()
all-in-one | #33 /app/backend/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(64): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #34 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Auth\\Middleware\\Authenticate->handle()
all-in-one | #35 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #36 /app/backend/vendor/laravel/framework/src/Illuminate/Routing/Router.php(805): Illuminate\\Pipeline\\Pipeline->then()
all-in-one | #37 /app/backend/vendor/laravel/framework/src/Illuminate/Routing/Router.php(784): Illuminate\\Routing\\Router->runRouteWithinStack()
all-in-one | #38 /app/backend/vendor/laravel/framework/src/Illuminate/Routing/Router.php(748): Illuminate\\Routing\\Router->runRoute()
all-in-one | #39 /app/backend/vendor/laravel/framework/src/Illuminate/Routing/Router.php(737): Illuminate\\Routing\\Router->dispatchToRoute()
all-in-one | #40 /app/backend/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch()
all-in-one | #41 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
all-in-one | #42 /app/backend/vendor/laravel/vapor-core/src/Http/Middleware/ServeStaticAssets.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #43 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Laravel\\Vapor\\Http\\Middleware\\ServeStaticAssets->handle()
all-in-one | #44 /app/backend/app/Http/Middleware/VaporBinaryResponseMiddleware.php(14): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #45 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): HiEvents\\Http\\Middleware\\VaporBinaryResponseMiddleware->handle()
all-in-one | #46 /app/backend/app/Http/Middleware/HandleDeprecatedTimezones.php(25): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #47 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): HiEvents\\Http\\Middleware\\HandleDeprecatedTimezones->handle()
all-in-one | #48 /app/backend/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #49 /app/backend/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
all-in-one | #50 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()
all-in-one | #51 /app/backend/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #52 /app/backend/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(50): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
all-in-one | #53 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
all-in-one | #54 /app/backend/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #55 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Http\\Middleware\\ValidatePostSize->handle()
all-in-one | #56 /app/backend/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(110): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #57 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
all-in-one | #58 /app/backend/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(62): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #59 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Http\\Middleware\\HandleCors->handle()
all-in-one | #60 /app/backend/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(57): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #61 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Http\\Middleware\\TrustProxies->handle()
all-in-one | #62 /app/backend/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
all-in-one | #63 /app/backend/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then()
all-in-one | #64 /app/backend/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
all-in-one | #65 /app/backend/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle()
all-in-one | #66 {main}
all-in-one | "}
all-in-one | 10.0.0.121 - - [22/Mar/2025:14:41:36 +0000] "POST /api/events/3/questions/answers/export HTTP/1.1" 500 44 "https://evento.potilivre.org/manage/event/3/questions" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:136.0) Gecko/20100101 Firefox/136.0"
all-in-one | 127.0.0.1 - 22/Mar/2025:14:41:36 +0000 "POST /index.php/events/3/questions/answers/export" 500
Hi @fguisso,
The error indicates there is something wrong with you DB configuration. It says the connection is MySQL, but Hi.Events uses PostgreSQL. utf8mb4 is MySQL specific encoding.
Check your DB environment settings and make sure the DB_CONNECTION is set to pgsql
@daveearley I'm following the docs and running the Docker Compose version. Everything is working, the postgres database is running and every other features are working. Like I said, when users finish a purchase, the data is stored in postgres, but just when export questions, it's not working.
If you want, I can provide more about my settings, but since I'm following the docs, there is no custom configs.
docker-compose.yml
DATABASE_URL=postgresql://postgres:<secret>@<db_name>:5432/hi-events
hey @daveearley any thoughts about that?
While testing the answer export feature locally, I encountered multiple issues when using FILESYSTEM_PRIVATE_DISK=local. I asked ChatGPT for help to debug the flow. Here's a step-by-step breakdown of what we found and fixed β including the specific file paths that need attention.
π§© Debugging Steps & Affected Files
-
β Missing
DB_CONNECTIONin Docker Compose
File:docker/all-in-one/docker-compose.yml
β I added this line- DB_CONNECTION=pgsql -
β Missing
FILESYSTEM_PRIVATE_DISKin.env
File:docker/all-in-one/.env
β I added in env, and in docker-compose:FILESYSTEM_PRIVATE_DISK=local- FILESYSTEM_PRIVATE_DISK=${FILESYSTEM_PRIVATE_DISK} -
β Hardcoded
's3-private'disk inJobPollingService
File:app/Services/Infrastructure/Jobs/JobPollingService.php
β Original line:private const STORAGE_DISK = 's3-private';β I tried to replace it with:
$this->disk = config('filesystems.private', env('FILESYSTEM_PRIVATE_DISK', 'local'));But this led to the next issue...
-
π₯ Error when calling
temporaryUrl()on a local disk
File: Still inJobPollingService.php
β The methodStorage::disk()->temporaryUrl()is used here:Storage::disk($this->disk)->temporaryUrl($filePath, now()->addMinutes(10))β This caused the following runtime exception:
RuntimeException: This driver does not support creating temporary URLs.
π Root Cause
The export of answers relies on Storage::disk()->temporaryUrl(), which only works with drivers like s3. The local driver β commonly used in development β does not support this method.
In contrast, the attendee export feature works perfectly using Excel::download(...).
π Working Example for Reference
File: app/Http/Actions/Attendees/ExportAttendeesAction.php
β Uses:
return Excel::download(
$this->export->withData($attendees, $questions),
'attendees.xlsx'
);
This approach works with any storage configuration and avoids the need for signed URLs.
β Suggested Fix
In JobPollingService.php, change the logic to:
if (method_exists(Storage::disk($this->disk), 'temporaryUrl')) {
return Storage::disk($this->disk)->temporaryUrl($path, now()->addMinutes(10));
} else {
return asset('storage/' . ltrim($path, '/')); // Or use Excel::download(...) directly
}
Alternatively, move the file export logic closer to the controller and use Excel::download() for local/dev environments.
π§ͺ How to Reproduce
- Set
FILESYSTEM_PRIVATE_DISK=localin your.env - Start the project via Docker
- Go to an eventβs admin questions page
- Try exporting answers
- Observe HTTP 500 + Laravel logs with
temporaryUrl()error
β Expected Behavior
Export should succeed and provide a file download regardless of disk driver, just like it already works for attendees.
Quick Fix for my running event
I accessed the PostgreSQL database inside the Docker container and ran a custom SQL query that:
- Joins
question_answers,questions, andorders - Pivots the data so each
question_idbecomes a column - Outputs each buyer's email and their responses to those questions
β The Query I Used
\COPY (
SELECT
COALESCE(o.email, '[no email]') AS email,
MAX(CASE WHEN qa.question_id = 2 THEN qa.answer::text END) AS question_2,
MAX(CASE WHEN qa.question_id = 3 THEN qa.answer::text END) AS question_3,
MAX(CASE WHEN qa.question_id = 4 THEN qa.answer::text END) AS question_4
FROM question_answers qa
JOIN questions q ON qa.question_id = q.id
LEFT JOIN orders o ON qa.order_id = o.id
WHERE qa.deleted_at IS NULL
GROUP BY o.email
ORDER BY o.email
) TO STDOUT WITH CSV HEADER;
π³ How to Run This Inside Docker and Export to CSV
- Save the query to a file (e.g.,
export_answers.sql) - Then run:
docker exec -i postgres psql -U postgres -d hi-events < export_answers.sql > answers.csv
This will generate a answers.csv file on your host machine with the data.
Alternatively, you can inline the query like this:
docker exec -i postgres psql -U postgres -d hi-events -c "<query>" > answers.csv
π For Others Wanting to Do the Same
If you're running Hi.Events locally and facing issues exporting answers through the UI:
- You can inspect the database schema with
\dtand\d <table>inside thepsqlconsole. - Identify the relationship between
question_answers,orders, andquestions. - Write a custom SQL query to pivot the answers based on
question_id. - Use
\COPYto export the result as CSV directly from PostgreSQL.
Thanks for the details @fguisso. A fix for this will be released in the coming days.