所以我在这里问你一个逻辑问题。
所以我有一个 Car 模型,其中包含以下属性: id,name,description 。
然后我有第二个名为 CarOptional 的模型,它实际上是第三个可选模型的关系模型,它具有以下属性: id_optional,id_car
然后我有第三个模型 CarColours (我们假装它是与 carOptional 类似的表格),带有 id_colour,id_car 属性。
现在我要保存一辆新车,所以我会选择这种方法
$car = Car :: create (arraydatas)
。
在db上保存我的数据我有我的车型,所以我可以拥有她的身份并拯救CarOptional es。
ForEach ($ optionals as $ optional) {
CarOptional :: create (array ("id_car" => $ car-> id, "id_optional" => $ optional-> id))
}
所以,我对 CarColours 模型做了同样的事情,所以使用create方法循环,但我要问的是:
如何处理CarOptional的创建错误(例如),然后停止所有后续创建,我想要"删除"在db上以前保存过,并返回错误?
答案 0 :(得分:1)
您要求的是:Transactions
<?php
namespace ProjectName\Whatever\Mappers;
final class CarMapper {
public function createCar($car, $optionals, $colors) {
DB::transaction(function () use($car, $optionals, $colors) {
$this->createOptionals($car, $optionals);
$this->createColors($car, $colors);
});
}
private function createOptionals($car,$optionals) {
foreach($optionals as $optional) {
CarOptional::create([
'id_car' => $car->id,
'id_optional' => $optional->id
]);
}
}
private function createColors($car,$optionals) {
foreach($colors as $color) {
CarColour::create([
'id_car' => $car->id,
'id_colors' => $color->id
]);
}
}
}
简单来说:使用SQL事务,如果在事务中间出现问题,则不会提交任何内容。您不需要关心&#34; 然后停止所有后续创建,我是否想要删除&#39;在db上先前保存的&#34;。
这是你应该关注的部分:
DB::transaction(function () {
// ...
});