【发布时间】:2021-10-26 13:17:23
【问题描述】:
如何在保存“父级”之前关联其他关联?我有一辆有很多其他零件的汽车:
- 一辆车有很多座位
- 一辆车有很多脚垫
- 一辆车只有一面镜子
- 等
问题是,如果座椅或脚垫有任何缺陷,则无法制造汽车:
$car = new Car(...);
// Many mats
$mats = [new Mat(..), new Mat(..)];
// One mirror
$mirror = new Mirror(..);
// I need to put them all together.
// This does not work
$car->saveMany([$mats, $mirror, $mats]);
// Does not work
$car->mats()->saveMany($mats);
$car->associate($mirror);
// Car should not be saved if either any of its associations have an error.
$car->save();
The docs 在实例化一个新对象然后保存其关联时没有提及此示例:HasMany、HasOne、BelongsTo 等
我看过这些,但无法理解:
如何通过调用“save()”来“关联”“car's”关联?
【问题讨论】:
-
您说如果其中任何一个关联出现错误则不应保存,但是您如何检查错误?如果某些内容无效,您是否只是让它500?如果数据库中不存在父模型,则无法保存相关模型,您需要拥有父模型的
id才能进行链接。我认为正确的方法是进行一些全面的验证,然后如果通过,则以正确的顺序(父级,然后是关联)创建模型。 -
嗨@BrianThompson 正确。问题是,我有一个创建“垫子”的函数。如果垫子的创建失败,我必须找到“汽车”然后删除它,因为我先保存它然后传递它的 ID。也许需要验证。
-
是的,我的建议是在创建
car之前验证mat数据。然后,如果验证通过,mat创建应该永远不会失败。所以你可以只创建car然后mat。 -
谢谢。这很容易做到。