@@ -729,35 +729,53 @@ public function getExtraQuestionAnswerByQuestion(SummitOrderExtraQuestionType $q
729729 return $ answer ? $ answer : null ;
730730 }
731731
732+
733+
734+ private ?array $ extraQuestionAnswersCache = null ;
735+ private function warmExtraQuestionAnswersCache ():void {
736+ try {
737+ if ($ this ->extraQuestionAnswersCache !== null ) {
738+ return ;
739+ }
740+
741+ $ sql = <<<SQL
742+ SELECT ExtraQuestionAnswer.QuestionID, ExtraQuestionAnswer.Value FROM `SummitOrderExtraQuestionAnswer`
743+ INNER JOIN ExtraQuestionAnswer ON ExtraQuestionAnswer.ID = SummitOrderExtraQuestionAnswer.ID
744+ WHERE SummitOrderExtraQuestionAnswer.SummitAttendeeID = :owner_id
745+ SQL ;
746+
747+ $ stmt = $ this ->prepareRawSQL ($ sql , ['owner_id ' => $ this ->getId ()]);
748+ $ rows = $ stmt ->executeQuery ()->fetchAllAssociative ();
749+
750+ $ map = [];
751+ foreach ($ rows as $ row ) {
752+ // QuestionID es int; Value es string (para multiselect puede ser CSV/JSON según tu modelo)
753+ $ map [(int )$ row ['QuestionID ' ]] = $ row ['Value ' ];
754+ }
755+ $ this ->extraQuestionAnswersCache = $ map ;
756+ }
757+ catch (\PDOException $ e ) {
758+ Log::error ($ e ->getMessage ());
759+ }
760+ }
732761 /**
733762 * @param SummitOrderExtraQuestionType $question
734763 * @return string|null
735764 */
736765 public function getExtraQuestionAnswerValueByQuestion (SummitOrderExtraQuestionType $ question ): ?string
737766 {
738767 try {
739- $ sql = <<<SQL
740- SELECT ExtraQuestionAnswer.Value FROM `SummitOrderExtraQuestionAnswer`
741- INNER JOIN ExtraQuestionAnswer ON ExtraQuestionAnswer.ID = SummitOrderExtraQuestionAnswer.ID
742- WHERE SummitOrderExtraQuestionAnswer.SummitAttendeeID = :owner_id AND ExtraQuestionAnswer.QuestionID = :question_id
743- SQL ;
744- $ stmt = $ this ->prepareRawSQL ($ sql , [
745- 'owner_id ' => $ this ->getId (),
746- 'question_id ' => $ question ->getId ()
747- ]);
748- $ res = $ stmt ->executeQuery ();
749- $ res = $ res ->fetchFirstColumn ();
750- $ res = count ($ res ) > 0 ? $ res [0 ] : null ;
751- return !is_null ($ res ) ? $ res : null ;
768+ $ this ->warmExtraQuestionAnswersCache ();
769+ $ qid = $ question ->getId ();
770+ return $ this ->extraQuestionAnswersCache [$ qid ] ?? null ;
752771 } catch (\Exception $ ex ) {
753- Log::debug ($ ex );
772+ \Log::debug ($ ex );
773+ return null ;
754774 }
755- return null ;
756775 }
757776
758777 public function clearExtraQuestionAnswers (): void
759778 {
760- Log::debug (sprintf ("SummitAttendee::clearExtraQuestionAnswers for attendee %s " , $ this ->getId ()));
761779 $ this ->extra_question_answers ->clear ();
762780 }
763781
0 commit comments