2016-02-05 156 views
4

我使用的MyISAM MySQL和我想在這裏使用的交易是我的代碼:交易與雄辯Laravel 5

DB::transaction(function() { 
$project = Project::find($id); 
$project->users()->detach(); 
$project->delete(); 
}); 

此代碼執行succesfuly,但我不知道該事務的工作......我怎麼能測試它?

回答

11

實際上只有兩種方法,既不是特別好,因爲DB:transaction不報告錯誤。

  1. 如果事務失敗,則將try/catch塊置於閉包內並在catch塊中設置一個外部變量。

  2. 做一個手動事務中,使用DB ::的BeginTransaction和回滾/提交,再次用一個異常處理程序,按照這個例子:

 
    DB::beginTransaction(); 
    try { 
     $project = Project::find($id); 
     $project->users()->detach(); 
     $project->delete(); 
     DB::commit(); 
     $success = true; 
    } catch (\Exception $e) { 
     $success = false; 
     DB::rollback(); 
    } 

    if ($success) { 
     // the transaction worked ... 
    } 
+0

我不關心錯誤報告我只需要確定2個查詢總是一起運行......你能告訴我手動事務的例子嗎? –

+0

我編輯了我的答案以包含一個示例。 – delatbabel

2

的問題是很老,但在我意見是沒有辦法實現與MyISAM存儲引擎的交易。

最新的MySQL服務器版本是5.7,相應的參考指南描述了MyISAM存儲引擎不支持事務。

https://dev.mysql.com/doc/refman/5.7/en/myisam-storage-engine.html

如果我正確認識,開始,提交和回滾語句沒有錯誤接受,但該行爲與預期不同。