Laravel 5 - 在数据库中按顺序保存模型

Laravel 5 - save models in db sequentially

所以我来问你一个逻辑问题。

所以我有一个 Car 模型,具有这些属性:id、name、description

然后我有一个名为 CarOptional 的第二个模型,它实际上是与第三个 Optional 模型的关系模型,它具有以下属性: id_optional, id_car.

然后我有第三个模型是 CarColours(我们假装它与 carOptional 类似 table) id_colour、id_car 个属性。

现在我要保存一辆新车,所以我会用这个方法 $car = Car :: create (arraydatas).

在数据库上保存了我的数据我有我的汽车模型所以我可以得到她的 ID 并拯救 CarOptional es。

ForEach ($ optionals as $ optional) {
   CarOptional :: create (array ("id_car" => $ car-> id, "id_optional" => $ optional-> id))
}

所以,我对 CarColours 模型做同样的事情,所以用 create 方法循环,​​但我要问的是:

如何处理 CarOptional 的创建错误(例如),然后停止所有后续创建,我是否想 "remove" 在之前保存的数据库上返回错误?

您要的是: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 事务,如果在事务中间出现问题,则不会提交任何内容。您不需要关心“然后停止所有后续创建,我是否想 'remove' 在数据库上先前保存的 ”。

这是您应该关注的部分:

DB::transaction(function () {
    // ... 
});