我对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
组内部做一些工作,当我发现异常时,我会回滚事务。但是,我担心的是我的工作方式。
为简单起见,importContent
方法做两件事,验证是否有错误,然后插入给定的数据。第一部分是让我感到困扰的问题,如果验证失败,则意味着数据中有错误,我什么也不插入(我发现发现错误后,在插入之前先使用continue
循环)。
因此,我的主要问题是在验证失败且没有插入数据的确切情况下,DB::rollback()
方法将做什么,因为没有事务开始。它会什么都不做,还是会回滚我没有做过的另一笔交易?