事务处理


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() 方法将事务进行回滚。