@@ -77,18 +77,33 @@ public function findByParticipant(string $participant, $type = Assignment::TYPE_
7777 }
7878
7979 public function deleteByParticipantOnBoard (string $ participant , int $ boardId , $ type = Assignment::TYPE_USER ) {
80- $ qb = $ this ->db ->getQueryBuilder ();
80+ // Step 1: Get all card IDs for the board that have assignments for this participant
81+ // This avoids MySQL Error 1093 by separating the SELECT from the DELETE operation
8182 $ cardIdQuery = $ this ->db ->getQueryBuilder ();
8283 $ cardIdQuery ->select ('a.card_id ' )
8384 ->from ('deck_assigned_users ' , 'a ' )
8485 ->innerJoin ('a ' , 'deck_cards ' , 'c ' , 'c.id = a.card_id ' )
8586 ->innerJoin ('c ' , 'deck_stacks ' , 's ' , 's.id = c.stack_id ' )
86- ->where ($ cardIdQuery ->expr ()->eq ('a.participant ' , $ qb ->createNamedParameter ($ participant , IQueryBuilder::PARAM_STR )))
87- ->andWhere ($ cardIdQuery ->expr ()->eq ('s.board_id ' , $ qb ->createNamedParameter ($ boardId , IQueryBuilder::PARAM_INT )))
88- ->andWhere ($ cardIdQuery ->expr ()->eq ('a.type ' , $ qb ->createNamedParameter ($ type , IQueryBuilder::PARAM_INT )));
89- $ qb ->delete ('deck_assigned_users ' )
90- ->where ($ qb ->expr ()->in ('card_id ' , $ qb ->createFunction ($ cardIdQuery ->getSQL ()), IQueryBuilder::PARAM_INT_ARRAY ));
91- $ qb ->executeStatement ();
87+ ->where ($ cardIdQuery ->expr ()->eq ('a.participant ' , $ cardIdQuery ->createNamedParameter ($ participant , IQueryBuilder::PARAM_STR )))
88+ ->andWhere ($ cardIdQuery ->expr ()->eq ('s.board_id ' , $ cardIdQuery ->createNamedParameter ($ boardId , IQueryBuilder::PARAM_INT )))
89+ ->andWhere ($ cardIdQuery ->expr ()->eq ('a.type ' , $ cardIdQuery ->createNamedParameter ($ type , IQueryBuilder::PARAM_INT )));
90+
91+ $ result = $ cardIdQuery ->executeQuery ();
92+ $ cardIds = [];
93+ while ($ row = $ result ->fetch ()) {
94+ $ cardIds [] = $ row ['card_id ' ];
95+ }
96+ $ result ->closeCursor ();
97+
98+ // Step 2: If we have card IDs, delete the assignments
99+ if (!empty ($ cardIds )) {
100+ $ deleteQuery = $ this ->db ->getQueryBuilder ();
101+ $ deleteQuery ->delete ('deck_assigned_users ' )
102+ ->where ($ deleteQuery ->expr ()->eq ('participant ' , $ deleteQuery ->createNamedParameter ($ participant , IQueryBuilder::PARAM_STR )))
103+ ->andWhere ($ deleteQuery ->expr ()->eq ('type ' , $ deleteQuery ->createNamedParameter ($ type , IQueryBuilder::PARAM_INT )))
104+ ->andWhere ($ deleteQuery ->expr ()->in ('card_id ' , $ deleteQuery ->createNamedParameter ($ cardIds , IQueryBuilder::PARAM_INT_ARRAY )));
105+ $ deleteQuery ->executeStatement ();
106+ }
92107 }
93108
94109
0 commit comments