Массовое обновление данных в бд на laravel/lumen (innoDB)
Суть проста, если нужно обновлять много данных, то просто заключите часть запросов в транзакции.
// Получаем данные, к примеру из базы
$data = DB::table('users')->get();
$counter = 0;
foreach($data as $value){
// Если счётчик в 0, то стартуем транзакцию
if($counter == 0)
DB::beginTransaction();
}
$counter++;
// Выполняем какие-то действия
$type = $value->type === 2?5:1;
// Обновляем данные
DB::table('users')->where('id', $value->id)->update(array('type' => $type));
// Счётчик достиг нужного порога - коммитим изменения в DB
if($counter >= 999){
DB::commit();
$counter = 0;
}
}
// Снова коммит для оставшихся
DB::commit();
Таким способом обновление данных займёт гораздо меньше времени.