2017-01-28 11 views
0

私はLaravel 5.3を使ってデモクラードを作成しようとしています。私は更新プログラムを処理するコントローラのメソッドを書いた。このメソッドは常にトランザクションを開始し、常に変更をロールバックする必要があります。したがって、変更は決してデータベースに反映されません。私の方法はLaravel 5.3でトランザクションをロールバックする方法は?

public function update($id, Request $request) 
{ 
    DB::beginTransaction(); 
    $this->affirm($request); 
    $biography = Biography::findOrFail($id); 
    $data = $request->all(); 
    $biography->update($data); 

    Session::flash('success_message', 'Biography was updated! However, because this is a demo the records are not persisted to the database.'); 
    DB::rollBack(); 

    return redirect()->route('demo.index'); 
} 

残念ながら、更新はまだたびにコミットしますどのように見えるかをここで

です。トランザクションを正しく開始してから、変更をロールバックするにはどうすればよいですか?

+0

あなたがコミットした後にロールバックすることができませんか?私はあなたがdbからのデータを取得していると雄弁なクエリを使用して更新されて参照してください。 – PaladiN

+0

私はコミットしたくありません。私はロールバックしたい。私はトランザクションを開始し、それをロールバックすることを期待しています – Jaylen

+0

私は試して、コードが期待どおりに動作していることがわかりました。あなたの成果は何ですか? – PaladiN

答えて

0

コミット前のコードが例外をスローする場合に備えて、ロールバックすることができます。

public function update($id, Request $request) 
{ 
DB::beginTransaction(); 
try{ 
$this->affirm($request); 
$biography = Biography::findOrFail($id); 
$data = $request->all(); 
$biography->update($data); 

Session::flash('success_message', 'Biography was updated! However, because this is a demo the records are not persisted to the database.'); 
//if there is not error/exception in the above code, it'll commit 
DB::commit(); 
return redirect()->route('demo.index'); 
} catch(\Exception $e){ 
//if there is an error/exception in the above code before commit, it'll rollback 
DB::rollBack(); 
return $e->getMessage(); 
} 

} 

あなたはこのanswer をチェックして、ここにすることができますdocumentation about transactions

関連する問題