2013-07-05 40 views
1

我使用的是項目的所有工作正常,內DB ::交易,但我在做什麼首先是創建一個文件夾:Laravel 4:DB ::交易提供了一個回調,看看導致

$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自己的錯誤接管,並且它不會走到這一步?

SO我怎麼能做到這一點?

回答

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

+0

這裏的問題我已經試過一個try/catch和,纔可以叫我的失敗,它將啓動laravels異常調用的嘗試,如它鏈接它自己的try/catch覆蓋,所以文件類 –

+0

你能告訴我們你試過的代碼嗎? –

+0

不知道,但複製了你上面的東西,它似乎工作,奇怪,但感謝 –