我使用的MyISAM MySQL和我想在這裏使用的交易是我的代碼:交易與雄辯Laravel 5
DB::transaction(function() {
$project = Project::find($id);
$project->users()->detach();
$project->delete();
});
此代碼執行succesfuly,但我不知道該事務的工作......我怎麼能測試它?
我使用的MyISAM MySQL和我想在這裏使用的交易是我的代碼:交易與雄辯Laravel 5
DB::transaction(function() {
$project = Project::find($id);
$project->users()->detach();
$project->delete();
});
此代碼執行succesfuly,但我不知道該事務的工作......我怎麼能測試它?
實際上只有兩種方法,既不是特別好,因爲DB:transaction不報告錯誤。
如果事務失敗,則將try/catch塊置於閉包內並在catch塊中設置一個外部變量。
做一個手動事務中,使用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 ... }
的問題是很老,但在我意見是沒有辦法實現與MyISAM存儲引擎的交易。
最新的MySQL服務器版本是5.7,相應的參考指南描述了MyISAM存儲引擎不支持事務。
https://dev.mysql.com/doc/refman/5.7/en/myisam-storage-engine.html
如果我正確認識,開始,提交和回滾語句沒有錯誤接受,但該行爲與預期不同。
我不關心錯誤報告我只需要確定2個查詢總是一起運行......你能告訴我手動事務的例子嗎? –
我編輯了我的答案以包含一個示例。 – delatbabel