我在一个function 里写了 Db::beginTransaction(); 可否在commit之前使用event? 我这样尝试去做测试,但是遇到一个问题,就是如果我event执行失败, 初始的function无法进行rollback. 请问这个可以有什么好的解决办法吗?
Db::beginTransaction();
try{
xxxx;
xxxx;
event("订单处理事件");
}catch(Exception $e){
Db::rollback;
xxxx
}
可以使用,事务注意事项参考 https://www.workerman.net/doc/webman/others/transaction.html
您好,感谢回复,但是我按您给的文档尝试了不同的组合,依然无法生效.现给出我这边测试的样例,麻烦空了指教一下哈.
测试function
Db::beginTransaction();
try{
SysLog::insert([
"device_id" => "123",
"log" => "测试"
]);
Event::emit('testevent', [], true);
Db::commit();
}catch (\Throwable $exception) {
var_dump($exception->getMessage());
Db::rollBack();
}
event内容(var_dump显示已正常进入event)
function testevent(): void
{
var_dump("test_event");
User::insert([
"abc" => 123
]);
}
class SysLog extends Model
{
protected $fillable = [
'device_id',
'log',
];
}
class User extends Model
{
protected $fillable = [
'user_id',
];
}
预期结果是,能拿到event抛出的异常,同时事务回滚.
Event::emit() 不会抛出异常, 用Event::dispatch()
感谢!已解决!
应该好好看看源码的!