Laravel:使用try…catch与DB :: transaction()

我们都使用DB::transaction()多个插入查询。这样做时,应该将try...catch其放置在内部还是包裹起来?甚至有必要try...catch在交易出现问题时自动将交易失败的情况包括在内吗?

try...catch包装交易的样本:

// try...catch

try {

// 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::beginTransactionand

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

回到顶部