Php 在嵌套的For Each循环中回滚事务
嗨,我是初学者。这里我有3个事务,我的目标是当它们中的每一个都出错时,那么所有的事务都应该进行回滚。我最近的结果是,Php 在嵌套的For Each循环中回滚事务,php,laravel,loops,foreach,try-catch,Php,Laravel,Loops,Foreach,Try Catch,嗨,我是初学者。这里我有3个事务,我的目标是当它们中的每一个都出错时,那么所有的事务都应该进行回滚。我最近的结果是,//第二次事务出现错误,//第一次事务和一些//第二次事务没有回滚。我已经在第二个循环中尝试了settrycatch,但仍然没有得到预期的结果。您还应该在beginTransaction上使用DB::connection,并在beginTransaction、commit和rollback语句中使用commit和rollback,您在默认连接上运行它们,但所有插入都在otherDB
//第二次
事务出现错误,//第一次
事务和一些//第二次
事务没有回滚。我已经在第二个循环中尝试了settrycatch
,但仍然没有得到预期的结果。您还应该在beginTransaction上使用DB::connection,并在beginTransaction、commit和rollback语句中使用commit和rollback,您在默认连接上运行它们,但所有插入都在otherDB连接上。您需要在两个连接上执行事务语句,这样所有内容都可以回滚啊,我明白了。所以try-catch-and-foreach模型没有错,对吗?谢谢你。
DB::beginTransaction();
try {
foreach ($values as $key => $val) {
//First
$id = DB::connection('otherDB')->table('HEAD')->insertGetId(['val' => $val]);
foreach ($detail as $key => $valDetail) {
// Second
DB::connection('otherDB')->table('DETAIL')->insert(['head_id' => $id]);
}
// Third
MyTable::where('val', $val->id)->update(['status' => 1]);
}
DB::commit();
return 'Success';
} catch (\Exception $e) {
DB::rollBack();
return 'Not Success';
}