事务处理
MiniFramework 在 2.9.7 版本中提供了在 Model 内执行事务处理的能力,相关方法的底层支持来自于 Mini\Db\Db 类。
重要提示:MiniFramework 从 2.11.0 版本开始,将原 Mini\Base\Model 类中的数据库操作方法全部迁移至新增的 Mini\Db\Query 查询构造类中。同时,为了确保使用 MiniFramework 的各位开发者升级到 2.11.0 版本后项目运行正常,在 Mini\Base\Model 类中,继承了 Mini\Db\Query 类,原有的方法均可正常调用,不受影响。(新增的 Mini\Db\Query 类也可独立调用。)
示例代码如下:
namespace App\Model;
use Mini\Base\Model;
class User extends Model
{
public function getUser()
{
// 使用 KEY 为 db1 的数据库实例
$this->useDb('db1');
// 开启事务
$this->beginTransaction();
try {
// 添加数据命令1
$this->table('user')->data(['name'=>'张三','age'=>18])->add();
// 添加数据命令2(故意写错 agee 字段名)
$this->table('user')->data(['name'=>'李四','agee'=>19])->add();
// 提交事务
$this->commit();
} catch (\Exception $e) {
// 事务回滚
$this->rollBack();
}
// do something...
}
}
上述代码中,第二次添加数据的命令中,故意将字段 age 写错为 agee,这将导致第二次添加数据的命令运行时出现异常。当程序捕获到异常时,会执行 $this->rollBack()
方法将事务进行回滚。