Я знаю, что это старый вопрос, но я искал ответ на эту же проблему сегодня.Я не мог поверить, что единственный способ решить эту проблему - сначала создать «ключ поиска» без использования транзакции.Я не знаю, была ли у OP такая же ситуация, но для моей транзакции мне была нужна только возможность выполнить откат, поскольку я удаляла и обновляла другие таблицы, но мне не требовались проверки внешнего ключа (только для этогосделка).Итак, перед первым запросом я добавил следующее (MySQL):
$transaction = $connection->beginTransaction();
$sqlForeingKeyDisable = 'SET foreign_key_checks = 0;';
$command = $connection->createCommand($sqlForeingKeyDisable);
$command->execute();
Это позволило мне без проблем использовать rollback () и commit ().Надеюсь, что смогу помочь.