saveMany()不存储数据

时间:2019-06-18 10:33:39

标签: laravel eloquent relationship

给出以下模型:

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方法

     

...

     

savecreate之间的区别在于save接受完整的Eloquent模型实例,而create接受普通的PHP array

那么createMany有效但saveMany无效的原因是什么?

2 个答案:

答案 0 :(得分:0)

您已经通过文档中的引文自己进行了解释。

saveMany()使用雄辩的模型,这对于更新现有零件非常有用。它不适用于$request->parts来自您的前端的通用数组。

createMany()使用通用数组,因为您的$request->parts(我再次假设)是它传递的数组。

答案 1 :(得分:0)

这是对Post::hydrate的滥用。 hydrate函数返回模型的集合,这些模型被标记为好像来自数据库。由于水合后没有任何变化,save()被忽略了,因为未对其进行任何更改。 此外,saveMany()并不关心指定的id,它会随意创建一个新对象。最后,我将验证移至相关模型,并对每次更新执行delete()/createMany()