使用事务处理的话,需要数据库引擎支持事务处理。比如 MySQL 的 MyISAM 不支持事务处理,需要使用 InnoDB 引擎。
使用 transaction 方法操作数据库事务,当发生异常会自动回滚,例如:
自动控制事务处理
Db::transaction(function(){ Db::table('think_user')->find(1); Db::table('think_user')->delete(1); });
也可以手动控制事务,例如:
// 启动事务 Db::startTrans(); try{ Db::table('think_user')->find(1); Db::table('think_user')->delete(1); // 提交事务 Db::commit(); } catch (\Exception $e) { // 回滚事务 Db::rollback(); } class HotWordModel extends Model { use InstanceTrait; private $database = 'database'; protected $table = 'hot_word'; public function saveSortById($id, $sort) { $where = [ 'id' => $id, ]; $saveData = [ 'sort' => $sort, 'update_time' => date('Y-m-d H:i:s') ]; return Db::database($this->database)->table($this->table)->where($where)->update($saveData); }
}
HotWordModel::getInstance()->startTrans(); $res = HotWordModel::getInstance()->saveSortById($v, $sortDataCount); if ($res === false) { //出现更新失败的情况 回滚数据 HotWordModel::getInstance()->rollback(); } HotWordModel::getInstance()->commit();
注意在事务操作的时候,确保你的数据库连接是相同的。