原生SQL

使用的类文件

Hyperf\DbConnection\Db

CURD

<?php

use Hyperf\DbConnection\Db;

// 查询
$users = Db::select('SELECT * FROM `user` WHERE gender = ?',[1]);  //  返回array 
foreach($users as $user){
    var_dump($user);
}

// 插入
$inserted = Db::insert('INSERT INTO user (id, name) VALUES (?, ?)', [1, 'Hyperf']); // 返回是否成功 bool

// 更新
$affected = Db::update('UPDATE user set name = ? WHERE id = ?', ['John', 1]); // 返回受影响的行数 int

// 删除
$affected = Db::delete('DELETE FROM user WHERE id = ?', [1]); // 返回受影响的行数 int

事务

  • 第一种:自动管理,如果闭包内的操作执行成功会自动提交,如果闭包内有异常错误会自动回滚
  • 第二种:手动管理
<?php

use Hyperf\DbConnection\Db;

// 自动提交
Db::transaction(function () {
    Db::table('user')->update(['votes' => 1]);

    Db::table('posts')->delete();
});


// 手动提交
Db::beginTransaction();
try{

    // Do something...

    Db::commit();
} catch(\Throwable $ex){
    Db::rollBack();
}

问题?

  1. 考虑一下laravel 框架 在 事件|job消费时调用两次,第一次开启事务,直接抛出异常,第二次消费时会有什么问题,怎么样去规避
  2. 在hyperf中是怎么处理的
文档更新时间: 2021-09-24 16:57   作者:赵豪