代码之家  ›  专栏  ›  技术社区  ›  ashish

在Laravel 5.6中使用批量更新

  •  0
  • ashish  · 技术社区  · 6 年前

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

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

    目标: 我要将所有活动(4)成员更新为挂起(5),并将所有挂起成员更新为过期(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 回复  |  直到 6 年前
        1
  •  1
  •   Brian Lee    6 年前

    使用查询生成器,如下所示:

    // 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]);