事务处理


MiniFramework 在 2.9.7 版本中提供了在 Model 内执行事务处理的能力,相关方法的底层支持来自于 Mini\Db\Db 类。示例代码如下:

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