Qee对事务提供了简单的支持,当然只有在存储引擎支持事务的前提下!
比如我们的的用户表分为用户基本表member表和用户详细信息表memberfield表,他们为一对一hasone,memberfield存有member表的主键uid,假设关联的属性为field
当我们更新用户信息时,可能同时要更新member表,和memberfield表,比如:
$user = $this->_app->currentUserObject();
if ($this->_context->isPOST()) {
$user->nickname = trim($this->_context->nickname);
$user->field->sex = $this->_context->sex;
$user->save();
}
假设现在nickname没有问题,而提供的sex数据有问题,并且导致数据库插入失败,极有可能导致同一个请求nickname更改成功,sex失败,这个可能还不会导致很严重的问题,如果涉及到一些重要数据,例如电子商务等就严重了!
在Qee中添加事务比较简单,如下:
$user = $this->_app->currentUserObject();
if ($this->_context->isPOST()) {
QDB::getConn()->startTrans();
try {
$user->nickname = trim($this->_context->nickname);
$user->field->sex = $this->_context->sex;
$user->save();
} catch (QException $e) {
QDB::getConn()->completeTrans(false);
// 友好的错误提示...
}
QDB::getConn()->completeTrans(true);
}