zend framework2 的transaction
2014年03月17日
zend framework2 可以通过以下方式实现transaction。
*注*:在别的地方,设置了名称为valuation_objects的Session,此Session包含一个多维数组。
$adapter的$this->config是通过ServiceManager处理的,也可以通过由浅入深详细剖析Zend Framework 2 数据库连接,获取数据实现。
public function saveObjectsAction() {
$sessionObjects = new Container('valuation_objects');
$objects = $sessionObjects->objects;
$valuationId = $this->params()->fromRoute('id');
$sessionObjects->objects = null;
$adapter = new Adapter($this->config);
$connection = null;
try{
//如果将下面这一行的注释去掉,数组编号为20的entity的id设置为null,将会执行数据写入操作的回滚处理,
//$objects[20]['entity']['id'] = null;
$connection = $adapter->getDriver()->getConnection();
$connection->beginTransaction();
foreach ($objects as $key => $object) {
foreach($object['valuateUsers'] as $val)
$adapter->query(
"INSERT INTO valuation_objects(valuate_user_id, valuated_user_id, valuation_id) VALUES (?, ?, ?);",
array($object['entity']['id'], $val['id'], $valuationId)
);
}
$connection->commit();
$valuationTable = $this->getServiceLocator()->get('ValuationTable');
$valuationTable->updateDecide($valuationId, 1);
} catch (Exception $e) {
if ($connection instanceof \Zend\Db\Adapter\Driver\ConnectionInterface) {
$connection->rollback();
}
}
}