Php Laravel:如何验证DB::transaction函数是否正常工作?
我在控制器中使用了Php Laravel:如何验证DB::transaction函数是否正常工作?,php,laravel-5,Php,Laravel 5,我在控制器中使用了DB::transaction函数,如下所示 public function store(){ $plant = new Plant; DB::transaction(function() { Plant::create(request(['name','plant_code','place'])); }); } 我想知道我使用该功能的方式是否正常,我需要验证它是否正常工作?如图所示,您有两种选
DB::transaction
函数,如下所示
public function store(){
$plant = new Plant;
DB::transaction(function()
{
Plant::create(request(['name','plant_code','place']));
});
}
我想知道我使用该功能的方式是否正常,我需要验证它是否正常工作?如图所示,您有两种选择:
结算
:DB
facade上的transaction
方法来运行一组
数据库事务中的操作。如果抛出异常
在交易关闭中,交易将自动
向后滚。如果关闭
成功执行,则事务
将自动提交您不需要担心
使用事务时手动回滚或提交
方法
手动使用事务:
如果您希望手动开始事务,并且完全控制回滚和提交,则可以在DB facade上使用beginTransaction方法:
DB::beginTransaction();
您可以通过回滚方法回滚事务:
DB::rollBack();
最后,您可以通过提交方法提交事务:
DB::commit();
手动使用事务链接到try catch块,如下所示:
DB::beginTransaction();
try {
// Interacting with the database
DB::insert(...);
DB::insert(...);
DB::insert(...);
DB::commit(); // Commiting ==> There is no problem whatsoever
} catch (\Exception $e) {
DB::rollback(); // rollbacking ==> Something went wrong
}
为了测试事务,您可以在不引发任何异常的情况下运行示例==>预期结果:将创建所有工厂
如果抛出异常,事务将回滚,并且不会在数据库中创建工厂:
public function store(){
$plant = new Plant;
DB::transaction(function()
{
Plant::create(request(['name','plant_code','place']));
throw new ModelNotFoundException("Just for testing :)");
});
}
添加use-illumb\Database\Eloquent\ModelNotFoundException代码>位于控制器顶部;) AFAIK事务就是这样工作的——一旦抛出异常,事务中的所有内容都将回滚。如果您在Plant::create()函数中进行任何db查询,则应在出现任何异常时回滚该查询。然而,若你们捕捉到异常,我不会期望它会被回滚。文档:看起来很棒。非常感谢您的回答。很乐意帮助:)您能告诉我DB::rollback()的用法吗代码>是什么?没有它,如果我们在try中出现异常,就不会提交任何内容。
public function store(){
$plant = new Plant;
DB::transaction(function()
{
Plant::create(request(['name','plant_code','place']));
throw new ModelNotFoundException("Just for testing :)");
});
}