Я не думаю, что существует какой-либо простой способ сделать это, поскольку поведение save () зависит от нескольких разных вещей (если вы вставляете / обновляете).
Если вы создали объект запроса доктрины, вы можете вызвать метод getSqlQuery () следующим образом:
$q = Doctrine_Query::create()
->select('u.id')
->from('User u');
echo $q->getSqlQuery();
но save () - это метод, а не объект, поэтому это не сработает. Я думаю, вам придется взломать некоторый код, чтобы определить, вставляете ли вы или обновляете, и создать запрос для входа на лету, а затем использовать save ().
Я знаю, что это предложение не идеально, потому что оно не записывает "точно", что делает save (), но для целей, которые вы заявили, оно должно работать так же хорошо.