laravel db回滚是否仅适用于打开的事务?
我有一个关于laravel db回滚是否仅适用于打开的事务?,laravel,Laravel,我有一个关于DB::rollback()和DB::transactions方法的问题。因此,首先要了解我问题的背景,我有以下交易: $reponse = DB::transaction(function() use ($request) { try { ... ... ... if (sizeof($this->headersErrors) > 0) { throw new Except
DB::rollback()
和DB::transactions
方法的问题。因此,首先要了解我问题的背景,我有以下交易:
$reponse = DB::transaction(function() use ($request) {
try {
...
...
...
if (sizeof($this->headersErrors) > 0) {
throw new Exception(json_encode($this->headersErrors));
}
$exploedZip = explode("/",$multimediaFilePath);
$multimediaFolder = explode(".zip",$exploedZip[sizeof($exploedZip)-1]);
$this->importContent($routesFilePath, "Routes","temp/multimedia/".$timeTrimed."/".$multimediaFolder[0]);
//This is the part I'm asking about
if (sizeof($this->contentErrors) > 0) {
throw new Exception(json_encode($this->contentErrors));
}
} catch (Exception $e) {
DB::rollback();
return response()->json([
"errors" => $e->getMessage()
]);
}
});
return $reponse;
正如您所注意到的,我正在try
bloc中做一些工作,当我捕获到异常时,我回滚事务。然而,我关心的是我是怎么做的
为简单起见,importContent
方法做两件事,验证是否有错误,然后插入给定的数据。第一部分是困扰我的问题,如果验证失败,这意味着数据中存在错误,我不会插入任何内容(我使用的是一个循环,在发现错误后插入之前,continue
)
因此,我这里的主要问题是,在验证失败且没有插入数据的情况下,DB::rollback()
方法会做什么,因为一开始没有事务。它会什么都不做,还是会回滚另一个我没有做的事务?