laravel 5.1中的交易

时间:2016-03-07 05:25:41

标签: php laravel laravel-5.1

laravel中的事务是否仅适用于DB facade?我想知道它是否适用于雄辩的模型;即以下代码将具有预期效果

DB::beginTransaction();

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

1 个答案:

答案 0 :(得分:3)

是的,适用于DB facade和您的Eloquent Models。

(例如,使用的连接将是默认设置,因此您可以。)

忘记DB::commit();什么时候可以提交!

此外,您的数据库表引擎必须是支持事务,例如InnoDB。

建议,您也可以使用更简单的事务方法

DB::transaction(function () {

    eloquentModel::query();

});

另外,不要害怕测试它,只是为了增加你的信心水平。 说,发现错误,看它是否有效

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();

快乐的编码!