事务经常用到,总是写相同的太麻烦了,搞个封装,直接用就完事了!
1、封装方法可以放在BaseService
/**
* 异常回滚事务的闭包.
*
* @param Closure $callback
* @param null | Closure $errorCallback
*
* @return mixed
* @throws Exception
*/
public function transaction(Closure $callback, Closure $errorCallback = null)
{
DB::beginTransaction();
try {
$result = $callback($this);
DB::commit();
return $result;
} catch (Exception $e) {
DB::rollback();
if (is_callable($errorCallback)) {
$errorCallback($this);
}
throw $e;
}
}
2、方法的使用-use ()里面就是正常的传参
use App\Services\BaseService;
$this->transaction(function () use ($params, $lastUpdateTime) {
//这里可以写正常的逻辑
});
评论区