我的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()
函数时,完成事务不会回滚。部分插入将在那里发生。
我的代码出了什么问题?
答案 0 :(得分:1)
如果您的数据库引擎支持事务,请检查here。我通常以这种方式使用交易:
DB::beginTransaction();
try {
//Code (DB insertions, ...)
DB::commit();
} catch(Exception $e) {
DB::rollback();
//Handle error
}