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 () {
// ...
});
所以我来问你一个逻辑问题。
所以我有一个 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 () {
// ...
});