2017-01-28 2 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

Разве вы не в состоянии выполнить откат после фиксации? Как я вижу, вы получаете данные из базы данных и обновления, используя красноречивые запросы. – 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

Смежные вопросы