当您想在一个调用中“更新或创建”许多记录时,Laravel中的createMany
是否有一个updateOrCreate
的等效项?
换句话说,是否存在一种updateOrCreateMany
函数?
从文档中看,似乎没有一个具有该名称的函数,但是也许有另一种友好的Laravel方法来执行此操作...或者我应该只使用foreach
(也许也使用MySQL的{{ 3}}功能)?
答案 0 :(得分:0)
基于Laravel的documentation,没有像updateOrCreateMany
这样的雄辩方法了
如果您有想法,那是有道理的,因为无论如何执行都需要顺序执行。由于某些条目可能会影响前一个条目,因此插入或更新模式不能同时进行。因此,即使有这样的方法,它仍然会在内部使用循环来逐个执行查询。
为进一步澄清,我们假设有一个方法updateOrCreateMany
可能会像这样输入数组数组:
Model::updateOrCreateMany([
[
'email' => 'x@y.com'
],
[
'email' => 'x2@y2.com'
],
[
'email' => 'x@y.com'
]
],
[
[
'name' => 'X Y'
],
[
'name' => 'X2 Y2'
],
[
'name' => 'X Y Updated'
]
]);
正如您所看到的,记录3应该更新记录1,因此,您不能仅通过将每个记录与记录1的插入时间的数据库映像进行比较而一次输入所有记录,这样您将输入重复的错误最初不存在以x@y.com
开头的电子邮件。
因此,没有updateOrCreateMany
方法,因为它不能同时完成,它必须是顺序的,这意味着某种循环机制,如foreach。
顺便问好! +1
有道理吗?
答案 1 :(得分:0)
我建议对数据使用foreach循环并使用updateOrCreate方法
foreach($records as $record){
Model::updateOrCreate([$record->id, $record->name], [$record->likes, $record->dislikes]);
}