我正在尝试使用laravel beginTransaction()/ DB :: commit在数据库中保存一些数据。常用的结构是:
DB::beginTransaction();
try {
// prepare data;
// $data->save();
DB::commit();
} catch (\Exception $e) {
DB::rollback();
echo 'erro';
}
使用上面的代码,我不会收到错误消息,也不会保存数据,但是如果我使用DB:commit两次,如:
DB::beginTransaction();
try {
// prepare data;
// $data->save();
DB::commit();
DB::commit();
} catch (\Exception $e) {
DB::rollback();
echo 'erro';
}
一切正常。有人知道为什么会发生这种情况,以及是否可以安全地做我正在做的事情?
已解决
代码被写在一个foreach内,问题是倍数交易的产生,解决了将foreach放入交易内的问题
DB::beginTransaction();
try {
foreach($data as d){
// prepare data;
// $data->save();
}
DB::commit();
} catch (\Exception $e) {
DB::rollback();
echo 'erro';
}