Php 是否可以在Doctrine#u Record';邮政';钩子?
是否可以从各种Doctrine_记录“post”挂钩中回滚整个事务?即从postInsert()、postpdate()和postSave()等内部Php 是否可以在Doctrine#u Record';邮政';钩子?,php,doctrine,Php,Doctrine,是否可以从各种Doctrine_记录“post”挂钩中回滚整个事务?即从postInsert()、postpdate()和postSave()等内部 我使用的是Doctrine 1.2,从文档和API来看,不清楚如何做到这一点。通过文档查看,很明显Doctrine\u事件是最好的起点,因为它已传递到事件处理程序中。本质上,您必须(通过getInvoker())获取Doctrine_连接对象,然后尝试调用它的回滚 唯一的问题是getInvoker返回几种类型的对象中的一种,我不确定它们是否都支持回
我使用的是Doctrine 1.2,从文档和API来看,不清楚如何做到这一点。通过文档查看,很明显Doctrine\u事件是最好的起点,因为它已传递到事件处理程序中。本质上,您必须(通过getInvoker())获取Doctrine_连接对象,然后尝试调用它的回滚 唯一的问题是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;
}
该文档展示了如何通过a\U连接开始、提交和回滚,因此这应该是最简单的起点。因此,侦听器看起来像:
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 :)
}
}
}