1

我在项目中使用 DB::transaction 一切正常,但我首先要做的是创建一个文件夹:

  $folder = \File:: makeDirectory($path, perm, recur);

然后通过这个我然后初始化我的 DB::transaction:

  if($folder){
    \DB::transaction(function() use($folderName){
        /////--- do the db stuff in here.

   })
  } else {
    ///-- folder creation failed return message
  }

这一切都很好,但是如果创建了我的文件夹,则 DB::transaction 失败,我无法知道这一点,因此我可以删除创建的文件夹,然后通知用户当前进程失败。

任何想法如何获得回调类型,以便如果它失败然后删除文件夹,我尝试过尝试捕获但 laravel 自己的错误接管,它没有走那么远?

那么我怎么能做到这一点?

4

1 回答 1

7

如果事务失败,将抛出异常。您只需抓住它:

$folder = \File:: makeDirectory($path, perm, recur);

if($folder){
  try
  {
    \DB::transaction(function() use($folderName){
      /////--- do the db stuff in here.
    })
  }
  catch (\Exception $e)
  {
    /////--- DB STUFF FAILED

    // TODO: DELETE FOLDER

    throw $e;
  }

} else {
  ///-- folder creation failed return message
}

编辑:查看 laravel 的源代码:https ://github.com/laravel/framework/blob/a4c76fb3601ee75a23dc0aec3f1a7fde86faf91d/src/Illuminate/Database/Connection.php#L415

于 2013-07-05T18:20:59.633 回答