给出以下模型:
Car Model
- parts: hasMany(Parts::class)
Part Model
- car: belongsTo(Car::class)
运行
Car::find(1)->parts()->saveMany(Part::hydrate($request->parts));
正确地返回零件列表,其中3个具有ID,一个没有ID,因此这3个模型需要更新,其中一个需要插入。
但是,查看我的数据库,没有插入任何行,发出dd(Car::find(1)->parts)
返回一个空数组。 createMany
有效,但是不会更新具有id
的模型-而是创建新模型。
在documentation中,
如果需要保存多个相关模型,则可以使用saveMany方法
...
save
和create
之间的区别在于save
接受完整的Eloquent模型实例,而create接受普通的PHParray
那么createMany
有效但saveMany
无效的原因是什么?
答案 0 :(得分:0)
您已经通过文档中的引文自己进行了解释。
saveMany()
使用雄辩的模型,这对于更新现有零件非常有用。它不适用于$request->parts
来自您的前端的通用数组。
createMany()
使用通用数组,因为您的$request->parts
(我再次假设)是它传递的数组。
答案 1 :(得分:0)
这是对Post::hydrate
的滥用。 hydrate
函数返回模型的集合,这些模型被标记为好像来自数据库。由于水合后没有任何变化,save()
被忽略了,因为未对其进行任何更改。
此外,saveMany()
并不关心指定的id
,它会随意创建一个新对象。最后,我将验证移至相关模型,并对每次更新执行delete()/createMany()
。