Laravel:使用try…catch与DB :: transaction()
我们都使用DB::transaction()
多个插入查询。这样做时,应该将try...catch
其放置在内部还是包裹起来?甚至有必要try...catch
在交易出现问题时自动将交易失败的情况包括在内吗?
try...catch
包装交易的样本:
// try...catchtry {
// Transaction
$exception = DB::transaction(function() {
// Do your SQL here
});
if(is_null($exception)) {
return true;
} else {
throw new Exception;
}
}
catch(Exception $e) {
return false;
}
相反,DB::transaction()
包装try … catch:
// Transaction$exception = DB::transaction(function() {
// try...catch
try {
// Do your SQL here
}
catch(Exception $e) {
return $e;
}
});
return is_null($exception) ? true : false;
或只是一笔没有交易的交易…抓住
// Transaction only$exception = DB::transaction(function() {
// Do your SQL here
});
return is_null($exception) ? true : false;
回答:
如果您需要通过代码手动“退出”交易(通过异常还是只是检查错误状态),则不应使用DB::transaction()
,而是将代码包装在DB::beginTransaction
and
DB::commit
/中DB::rollback()
:
DB::beginTransaction();try {
DB::insert(...);
DB::insert(...);
DB::insert(...);
DB::commit();
// all good
} catch (\Exception $e) {
DB::rollback();
// something went wrong
}
请参阅交易文档。
以上是 Laravel:使用try…catch与DB :: transaction() 的全部内容, 来源链接: utcz.com/qa/421531.html