У меня есть проект, написанный с использованием PHP на вершине Laravel 5.7. Я использую Eloquent ORM для взаимодействия с базой данных.
Мне нужно иметь возможность обновлять много записей после извлечения их из базы данных.
Вот как я пытаюсь это сделать.
$records = Record::where('Key','Test')->get();
$values = collecT([
['Id' => 1, 'Col' => 100],
['Id' => 2, 'Col' => 200],
['Id' => 3, 'Col' => 500],
....
]);
foreach($records as $record) {
$newValue = $values->where('Id', $record->id)->first();
if(is_null($newValue)){
continue;
}
$record->ColName = $newValue['Col'];
$record->save();
}
Приведенный выше код не записывает обновленное значение в базу данных. Однако, если я сделаю следующее, он будет обновлен
foreach($values as $value) {
$record = Record::where('Key','Test')->where('id', $value['Id'])->first();
if(is_null($record)){
continue;
}
$record->ColName = $value['Col'];
$record->save();
}
Хотя приведенный выше код работает, мне нужно сделать 1 оператор выбора + 1 для каждой записи в массиве $values
. Если размер массива $values
равен 1000. Это сгенерирует до 2000 безумных запросов!
Как правильно обновить несколько записей в базе данных без обновления диапазона.