Laravel4:块函数不适用于模型 save()


Laravel4: Chunk function not working with model save()

我有一个查询来选择所有用户并散列密码并保存该模型。因为它超时,因为数据库中有大量数据,我想我会尝试 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();
        }
     });

这不会保存模型。 当我尝试在save()后转储$user变量时,它会显示更新的值,但是当我查看数据库时,它仍然没有改变。我尝试使用 try catchtransaction 只是为了查看它在此过程中是否遇到任何异常,没有任何帮助。任何帮助将不胜感激。另外,我在password领域没有$guarded。

你只是做错了。您能知道应该在该循环中更新哪一行吗?不?雄辩也不知道,所以它运行update ... where id is null ;)

只需在select子句中添加id,它就会起作用(除非你在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();
    }
  });