在Laravel 5.6中使批量更新工作

时间:2018-06-23 02:45:18

标签: php laravel laravel-5 eloquent laravel-5.6

我的应用程序是在laravel 5.6中制作的

情况: 我有一个名为“ members”的表,其中有一列名为“ membershipstatus_id”。 状态选项为4、5和1
4 =有效,5 =待处理和1 =过期

目标: 我想将所有active(4)成员更新为pending(5),并将所有pending过期(1)。

我尝试过的解决方案: 到目前为止,以下是我尝试的结果,但没有结果。

    // get all active and pending members        
    $members = Member::where('membershipstatus_id', 5)
                ->orWhere('membershipstatus_id', 4)
                ->get();


    // bulk update with chunk of 200, if this is possible
    $members->chunk(200, function($members)
    {


        foreach($members as $member)
        {

            // if status is pending, update to expire
            if($member->membershipstatus_id == 5)
            {
              $member->update(['membershipstatus_id' => 1]);
             }
            // if status is active, update to pending, i updated a small mistake here. 
            if($member->membershipstatus_id == 5)
            {
              $member->update(['membershipstatus_id' => 4]);
             }


        }
    }
 );

return "update confirm";

现在,如果有人可以用一种更快捷的方法来进行此操作,也请让我知道,我确定我在这里犯了一些愚蠢的错误。请为我指出正确的方向。

阿什什

1 个答案:

答案 0 :(得分:1)

使用查询构建器,例如:

// update pending to expired
DB::table('members')
    ->where('membershipstatus_id', 5)
    ->update(['membershipstatus_id' => 1]);

// update active to pending
DB::table('members')
    ->where('membershipstatus_id', 4)
    ->update(['membershipstatus_id' => 5]);