作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
save(); $b = new B(); $b->conte-6ren">
在我的 Controller 中,我有类似于以下的代码:
$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;
其中A
、B
和C
都是模型。
如您所见,每个模型分配都依赖于正确分配的先前记录(即 C
依赖于 B
,而 B
依赖于在 C
)
我想编写代码,以便如果其中一条新记录失败,它会删除所有以前的记录(即全部或全部)。
例如,
A
保存失败,代码优雅结束B
保存失败,则删除对应的A
记录C
保存失败,则移除其对应的B
和A
记录我该怎么做?
最佳答案
其实很简单,使用数据库事务:
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) {
// ...
});
关于php - 如果以后的记录无法添加到 Laravel 5,如何回滚新记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34472065/
命令 svn status 返回如下内容: ? SomeClient\BUTCHERED.docx M SomeClient\Development notes.txt ?
我是一名优秀的程序员,十分优秀!