Просматривая документы, становится ясно, что Doctrine_Event - ваша лучшая отправная точка, поскольку она передается в обработчики событий.По сути, вам нужно взять объект Doctrine_Connection (через getInvoker ()) и затем попытаться вызвать откат для него.
Единственная проблема в том, что getInvoker возвращает один из нескольких типов объектов, и я не уверенесли все они поддерживают метод отката, вам может потребоваться некоторая условная логика, чтобы определить, можно ли даже откатить их все и как это сделать для разных случаев.
/**
* getInvoker
* returns the handler that invoked this event
*
* @return Doctrine_Connection|Doctrine_Connection_Statement|
* Doctrine_Connection_UnitOfWork|Doctrine_Transaction the handler that invoked this event
*/
public function getInvoker()
{
return $this->_invoker;
}
В документации показано, какНачать, зафиксировать и откатить через Doctrine_Connection, так что это будет самая легкая отправная точка.Так что слушатель будет выглядеть примерно так:
class BlogPost extends Doctrine_Record
{
public function postUpdate( $event )
{
$invoker = $event->getInvoker();
switch(get_class($invoker)) {
case 'Doctrine_Connection':
$invoker->rollbakck();
break;
case 'Doctrine_Connection_Statement':
case 'Doctrine_Collection_UnitOfWork':
case 'Doctrine_Transaction':
// todo can we rollback from these ?
// if so figure out how :)
}
}
}