Laravel:块功能无法使用模型save()

时间:2015-01-22 14:48:43

标签: php laravel-4 eloquent mysql5

我有一个查询来选择所有用户并哈希密码并保存该模型。因为它在数据库中存在大量数据时会超时,我想我会尝试使用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 catchtransaction来查看它是否在此过程中遇到任何异常,没有任何帮助。任何帮助将不胜感激。另外,我在password字段上没有看守。

1 个答案:

答案 0 :(得分:1)

你只是做错了。你能告诉那个循环中应该更新哪一行吗?没有? 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();
    }
  });