laravel db回滚仅适用于已打开的事务吗?

时间:2019-08-09 15:47:48

标签: laravel

我对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()方法将做什么,因为没有事务开始。它会什么都不做,还是会回滚我没有做过的另一笔交易?

0 个答案:

没有答案