laravel 数据库事务上下文在被调用函数上可用
laravel db transaction context is available on called functions
我发现要在 Laravel 中使用 DB::transaction,结合 ORM,我们需要 运行 像这样的东西:
DB::transaction(function() {
//
Model::create($something);
});
我的问题是:
如果我需要从闭包内部调用其他函数,即 运行 的其他创建方法,将在“事务”环境中还是在外部?
DB::transaction(function() {
//
ModelX::create($something);
$this->somefunction($data);
});
private function somefunction($data){
ModelY::create($data) <----this create is in the transaction or do I need a new one for having rollback in case of errros?
}
请记住,您的代码可以使用任何不会 return 重定向的额外 functions/methods。这将跳过 commit() 或 rollback()。一旦 beginTransaction() 开始,它必须以 commit() 或 rollback() 结束。
DB::beginTransaction();
try {
/* your code */
/* you can also use DB::commit(); at the end of TRY code like this */
} catch (\Exception $ex) {
DB::rollback();
/* handle error */
/* use return after rollback() */
}
DB::commit();
/* use return after commit(); */
经过几次测试,我可以告诉模型也不需要闭包,即使您在另一个函数中有一个创建方法,并且抛出异常 - 在主函数或函数中 - 回滚和提交声明!
好吧,我希望的更多!!!!
这是我测试的代码:
DB::beginTransaction();
try {
$this->pippo();
} catch (\Exception $ex) {
DB::rollback();
}
DB::commit();
public function pippo(){
$type=Cga_type::create(['name'=>'vvvv','description'=>'yyy']);
throw new Exception('error');
}
如果我评论交易功能,记录将写入数据库,否则不会!!!
我发现要在 Laravel 中使用 DB::transaction,结合 ORM,我们需要 运行 像这样的东西:
DB::transaction(function() {
//
Model::create($something);
});
我的问题是: 如果我需要从闭包内部调用其他函数,即 运行 的其他创建方法,将在“事务”环境中还是在外部?
DB::transaction(function() {
//
ModelX::create($something);
$this->somefunction($data);
});
private function somefunction($data){
ModelY::create($data) <----this create is in the transaction or do I need a new one for having rollback in case of errros?
}
请记住,您的代码可以使用任何不会 return 重定向的额外 functions/methods。这将跳过 commit() 或 rollback()。一旦 beginTransaction() 开始,它必须以 commit() 或 rollback() 结束。
DB::beginTransaction();
try {
/* your code */
/* you can also use DB::commit(); at the end of TRY code like this */
} catch (\Exception $ex) {
DB::rollback();
/* handle error */
/* use return after rollback() */
}
DB::commit();
/* use return after commit(); */
经过几次测试,我可以告诉模型也不需要闭包,即使您在另一个函数中有一个创建方法,并且抛出异常 - 在主函数或函数中 - 回滚和提交声明! 好吧,我希望的更多!!!!
这是我测试的代码:
DB::beginTransaction();
try {
$this->pippo();
} catch (\Exception $ex) {
DB::rollback();
}
DB::commit();
public function pippo(){
$type=Cga_type::create(['name'=>'vvvv','description'=>'yyy']);
throw new Exception('error');
}
如果我评论交易功能,记录将写入数据库,否则不会!!!