2016-03-07 7 views
0

Выполняет ли транзакция в laravel только с фазой DB ?. Я хочу знать, работает ли это с красноречивой моделью; т.е. следующий код будет иметь преднамеренный эффектСделка в laravel 5.1

DB::beginTransaction(); 

try { 
    eloquentModel::query(); 
} catch (\Exception $e) { 
    DB::rollback(); 
} 

ответ

3

Да, работает как с фасадом БД, так и с вашими Красноречивыми моделями.

(В вашем примере, соединение, используемое будет по умолчанию, так что вы все в порядке.)

Не забудьте DB::commit(); когда это нормально совершить!

Кроме того, ваш движок базы данных базы данных должен поддерживать транзакции, такие как InnoDB.

Предложение, вы можете также использовать метод проще, транзакции

DB::transaction(function() { 

    eloquentModel::query(); 

}); 

Кроме того, не бойтесь, чтобы проверить это, просто чтобы повысить уровень доверия. Скажем, provoque ошибки, чтобы увидеть его работу

DB::beginTransaction(); 

try { 
    eloquentModel::query(); 
    eloquentModel::create(['field_not_exists' => 'will throw exception!']); 
} catch (\Exception $e) { 
    // DB::rollback(); // test with comment, and without comment, check DB for results ;) 
} 
DB::commit(); 

Счастливого кодирования!

+0

Полезный. благодаря! – SJB