我有这样的交易:
return DB::transaction(function() use($intersectedArray,$user,$currentTime) {
try {
foreach ($intersectedArray as $subItemId) {
$user->todoSubItems()->updateExistingPivot($subItemId, ["done" => 1]);
}
}
catch (Exception $e){
return response()->json(500);
}
return response()->json($intersectedArray, 200);
});
首先,可以像这样运行循环吗?(如果单个查询无法更新,我希望回滚整个事务。
2,即使我像这样抓住了错误,交易是否仍会回滚?还是会阻止交易工作?
答案 0 :(得分:1)
在返回500错误之前,您想要DB::rollBack();
。
仅在遇到未捕获的异常时才会回滚事务。当您正在捕获异常时,除非您明确这样做,否则它不会回滚。