Laravel 5-顺序保存模型



所以我在这里问你一个逻辑问题。

所以我有一个 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 () {
    // ... 
});

最新更新