У меня есть запрос, чтобы выбрать всех пользователей и хэшировать пароль и сохранить эту модель. Поскольку время ожидания истекает из-за большого объема данных в БД, я решил попробовать функцию chunk (). Мой запрос выглядит так:
$users = User::where('password','!=','0')->select(array('password'))->chunk(50,function($users){
foreach ($users as $user) {
$user->password = Hash::make($user->password);
$user->save();
}
});
Это не спасает модель. когда я пытаюсь сбросить $user
переменная после save()
он отображает обновленные значения, но когда я смотрю в БД, он все еще остается неизменным. Я пытался с помощью try catch
а также transaction
просто чтобы увидеть, попадает ли какое-либо исключение во время процесса, ничего не помогло. Любая помощь будет оценена. Кроме того, я не охраняю password
поле.
Вы просто делаете это неправильно. Можете ли вы сказать, какая строка должна быть обновлена в этом цикле? Нет? Eloquent тоже не знает, поэтому работает update ... where id is null
😉
Просто добавь id
к select
пункт, и это будет работать (если у вас нет магии, происходящей в saving
событие и т. д.):
$users = User::where('password','!=','0')
->select(array('id', 'password'))
->chunk(50,function($users){
foreach ($users as $user) {
$user->password = Hash::make($user->password);
$user->save();
}
});
Других решений пока нет …