Php 在嵌套的For Each循环中回滚事务

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

嗨,我是初学者。这里我有3个事务,我的目标是当它们中的每一个都出错时,那么所有的事务都应该进行回滚。我最近的结果是,
//第二次
事务出现错误,
//第一次
事务和一些
//第二次
事务没有回滚。我已经在第二个循环中尝试了set
trycatch
,但仍然没有得到预期的结果。

您还应该在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';
    }