所以我在这里问你一个逻辑问题。
所以我有一个 CAR 具有这些属性的模型: ID,名称,描述。
然后,我有第二个名为 caroptional 的模型,它实际上是与第三可选模型的关系模型,并且具有这些属性: id_optional,id_car,id_car 。
然后,我有第三个模型是 carcolours (我们假装与 caroptional >(具有 ID_COLOUR,ID_CAR properties。
现在我要保存一辆新车,所以我会选择该方法 $car = Car :: create (arraydatas)
。
保存了我的数据,我有我的汽车型号,以便我可以拥有她的身份证并救出Caroptional es。
ForEach ($ optionals as $ optional) {
CarOptional :: create (array ("id_car" => $ car-> id, "id_optional" => $ optional-> id))
}
所以,我对 carcolours 型号也这样做,所以使用创建方法的循环,但是我问的是:
我如何处理Caroptional的创建错误(例如(,然后停止所有后续创建,并且我想在db上"删除"以前保存的db,然后返回错误?
您要要求的是:Transactions
<?php
namespace ProjectNameWhateverMappers;
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事务,如果交易中间出现问题,则什么都不会。您不需要关心" ,然后停止所有后续创建,并且我想在db上'删除'先前保存的 "。
这是您应该集中精力的部分:
DB::transaction(function () {
// ...
});