Laravel 5后面的记录添加失败如何回滚新记录?

How to rollback new records if a later record fails to add in Laravel 5?

在我的控制器中,我有类似于以下的代码:

$a = new A();
$a->content = "blah";
$a->save();

$b = new B();
$b->content = "blah2";
$b->a_id = $a->id;
$b->save();

$c = new C();
$c->content = "blah3";
$c->b_id = $b->id;

其中 ABC 都是模型。

如您所见,每个模型分配都依赖于正确分配的先前记录(即 C 依赖于 B,而 B 依赖于 C

我想编写代码,以便如果其中一条新记录失败,它会删除所有以前的记录(即全部或全部)。

例如,

我该怎么做?

真的很简单,使用数据库事务:

DB::transaction(function () {

    $a = new A();
    $a->content = "blah";
    $a->save();

    $b = new B();
    $b->content = "blah2";
    $b->a_id = $a->id;
    $b->save();

    $c = new C();
    $c->content = "blah3";
    $c->b_id = $b->id;

});

这里的一切都将自动完成 - 如果上述任何一项失败,结果将与交易中的代码相同 运行。

参考:Laravel database transactions

编辑

如果你需要传递任何变量,你需要像这样使用use构造:

DB::transaction(function () use ($variable1, $variable2) {
  // ...
});

参考:Anonymous functions