【发布时间】:2023-03-03 13:58:01
【问题描述】:
我有一个 Parent 模型与 hasMany 关系到 Child 模型。我想用特定和不同的值更新每个孩子的单个属性。我该怎么做?
我知道我可以使用批量赋值来更新具有相同值的每个孩子的属性,即
Parent::findOrFail($id)->children()->update(["property"=>"new value"])
但是如何使用单独设置的值来做到这一点? 例如如果我的父母有 4 个孩子,我想用这样的东西来设置它
Parent::findOrFail($id)->children()->update(["property"=>[1,2,3,4]])
然后孩子一有 1,孩子二有 2 等等。
【问题讨论】:
-
update方法更新现有数据。在你的情况下,你有新的价值吗?然后你需要创建,或者使用updateOrCreate方法。但不幸的是,5.7 上没有任何updateOrCreateMany方法。在 8.x 上,您可以使用 upserts 方法更新批量查询 -
循环
children()并逐个更新,或附加到更新 SQL 语句。如果需要,您可以使用循环索引;foreach(...->children() as $index => child){ $child->update(['property' => $index]); },等等等等。 -
有很多方法可以做到这一点;
children集合上的循环是最简单的。你试过什么?
标签: php laravel eloquent-relationship