Исходя из документации от Laravel, нет, для eloquent не существует метода, подобного 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
Имеет смысл?