[英]What is the difference between DB::beginTransaction() and DB::transaction()?
我正在使用 Laravel 5.2。
我想知道两者之间有什么区别:
DB::beginTransaction()
和DB::transaction()
DB::commitTransction()
和DB::commit()
DB::rollbackTransction()
和DB::rollback()
任何帮助将不胜感激。
DB::beginTransaction()
只会开始一个事务,而对于DB::transaction()
你必须传递一个将在事务内部执行的闭包函数。
所以这:
DB::transaction(function() {
// Do something and save to the db...
});
与此相同:
// Open a try/catch block
try {
// Begin a transaction
DB::beginTransaction();
// Do something and save to the db...
// Commit the transaction
DB::commit();
} catch (\Exception $e) {
// An error occured; cancel the transaction...
DB::rollback();
// and throw the error again.
throw $e;
}
如您所见, DB::transaction()
是一个“帮助器”函数,用于避免编写代码来捕获错误、开始事务、提交事务以及在发生错误时可选择回滚(取消事务)。
如果您有更复杂的逻辑,或者需要特定的行为,您将手动构建您的事务; 如果您的逻辑相当简单,那么DB::transaction()
就是要走的路。
至于DB::commitTransaction()
和DB::rollbackTransaction()
,我找不到信息。
检查您使用的东西的源代码是一个很好的做法,因为您将了解它们是如何编写的,以及如何编写。 这是这些方法的源文件。
从 Laravel 6 开始使用 Transactions 必须使用以下辅助函数。
use Illuminate\Support\Facades\DB;
try {
// For Begin a transaction
DB::beginTransaction();
// Do something
// Commit the transaction
DB:: commit();
} catch (\Throwable $e) {
// An error occured
DB::rollback();
// and throw the error again.
throw $e;
}
如果您使用 DB::commitTransaction(); 函数,得到错误未定义的函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.