Laravel 4: DB :: transaction предлагает обратный вызов, чтобы увидеть результат

Вопрос:

Я использую DB :: transaction внутри проекта, все работает нормально, но то, что я делаю первым, создает папку:

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

то при передаче этого я затем запустите мою транзакцию DB:

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

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

Это все хорошо, но если моя папка создана, то транзакция DB :: не работает, для меня нет возможности узнать это, поэтому я могу удалить созданную папку и затем сообщить пользователю, что текущий процесс завершился неудачно.

Любые идеи о том, как я могу получить тип обратного вызова, чтобы, если он не удался, удалите папку, я попробовал попытку catch, но с собственными ошибками laravels, и это не так далеко?

ТАК, как я могу это достичь?

Лучший ответ:

Если транзакция завершится с ошибкой, будет выбрано исключение. Вы просто поймаете это:

$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
}

EDIT: см. Исходный код laravel: https://github.com/laravel/framework/blob/a4c76fb3601ee75a23dc0aec3f1a7fde86faf91d/src/Illuminate/Database/Connection.php#L415

Оцените статью
TechArks.Ru
Добавить комментарий