数据库事务在laravel 5.2中不起作用?

时间:2016-05-10 05:20:27

标签: php mysql laravel laravel-5 transactions

我的db事务有很多插入查询,

DB::transaction(function() use ($visaForms, $fields) {
            foreach ($visaForms as $visaForm) {
                $visaForm->save();
                foreach ($fields as $field) {
                    $field->visaForm()->associate($visaForm);
                    $field->save();
                    $field->details()->saveMany($field->getDetails());
                    !empty($field->getOptions()) ? $field->options()->saveMany($field->getOptions()) : NULL;
                    !empty($field->getRules()) ? $field->rules()->attach($field->getRules()) : NULL;
                }
            }
        });

Integrity constraint violation抛出attach()函数时,完成事务不会回滚。部分插入将在那里发生。 我的代码出了什么问题?

1 个答案:

答案 0 :(得分:1)

如果您的数据库引擎支持事务,请检查here。我通常以这种方式使用交易:

DB::beginTransaction();
try {
    //Code (DB insertions, ...)
    DB::commit();
} catch(Exception $e) {
    DB::rollback();
    //Handle error
}