Laravel 为updateOrCreate创建许多等效项

Laravel 为updateOrCreate创建许多等效项,laravel,laravel-5,eloquent,Laravel,Laravel 5,Eloquent,当您想在一次调用中“updateOrCreate”多个记录时,在Laravel中是否有与createMany等效的updateOrCreate 换句话说,是否有一种updateOrCreateMany函数 从文档中看,似乎没有使用该名称的函数,但可能有另一种友好的Laravel方法来实现这一点。。。或者我应该只使用一个foreach(可能也使用MySQL的功能)?基于Laravel的特性,没有像updateOrCreateMany这样雄辩的方法 如果你想一想,这是有意义的,因为执行无论如何都需要

当您想在一次调用中“updateOrCreate”多个记录时,在Laravel中是否有与
createMany
等效的
updateOrCreate

换句话说,是否有一种
updateOrCreateMany
函数

从文档中看,似乎没有使用该名称的函数,但可能有另一种友好的Laravel方法来实现这一点。。。或者我应该只使用一个
foreach
(可能也使用MySQL的功能)?

基于Laravel的特性,没有像
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

顺便提一下,好问题+一,


有意义吗?

我建议对数据使用foreach循环,并使用updateOrCreate方法

foreach($records as $record){
   Model::updateOrCreate([$record->id, $record->name], [$record->likes, $record->dislikes]);
}

感谢您花时间回答,但是
createMany
方法不能处理您建议的格式的数据,
updateOrCreate
方法也不能。循环使用
updateOrCreate
方法没有技术限制,我只是想知道是否有更有效的方法。@ChuckLeButt真的吗
updateOrCreate
无法使用我建议的格式处理数据?:)那么它到底是如何工作的呢?请告诉我……据我所知,它接受两个参数,两个数组……第一个是匹配的,第二个是update
updateOrCreate(array$attributes,array$values=[])
,这与我试图用两个数组构造
updateOrCreateMany
的方法相同,但由于它的数组很多,它将是与
insert
方法相同的二维数组。这里有一个参考:@ChuckLeButt PS,
createMany
的工作原理与
insert
完全相同,获取2D数组的一个参数。当然没有第二个参数,因为您不需要匹配任何东西…我不知道您所说的
是什么意思,但是createMany方法不能处理您建议的格式的数据,当然:)createMany不需要额外的参数来匹配。对不起,我不是很清楚。我的意思是数据必须以以下格式提交:
Array([0]=>Array([deposition]=>Oakland)[1]=>Array([price]=>99[折扣]=>1])Array([0]=>Array([deposition]=>Los Angeles)[1]=>阵列([price]=>799[折扣]=>0))