laravel数组使用不同的ID更新多行

问题描述

当我更新多个数组值时我陷入困境,然后每次更新不同ID中的相同值,例如我有三个字段,如email,alert_level并在select dropdoewn中选择取决于alert_level select选项,所以现在我想更新所有三个字段,但是陷入困境

这是我的代码

 if(!empty($requestData['edit_email']) && count($requestData['edit_email']) > 0){
    foreach($requestData['edit_email'] as $i => $list){
       $ids = array();
           $editdata = array();
           array_push($ids,$requestData['fid']);                    
           $editrow['email']=$requestData['edit_email'][$i];
           $editrow['phone'] = NULL;
           switch($requestData['edit_email_alert_level'][$i]){
              case 'client':
                   $editrow['alert_level'] = "client";
                   $editrow['client_id'] = (!empty($requestData['edit_locations'])) ? implode(",",$requestData['edit_locations']) : NULL;
                   $editrow['salescenter_id'] = NULL;
                   $editrow['location_id'] = NULL; 
                   break;
              case 'salescenter':
                   $editrow['alert_level'] = "salescenter";
                   $editrow['client_id'] = (!empty($requestData['edit_locations'])) ? implode(",$requestData['edit_locations']) : NULL;
                   $editrow['salescenter_id'] = NULL;
                   $editrow['location_id'] = NULL;
                   break;
              case 'sclocation':
                   $editrow['alert_level'] = "sclocation";
                   $editrow['location_id'] = (!empty($requestData['edit_locations'])) ? implode(",$requestData['edit_locations']) : NULL; 
                   $editrow['client_id'] = NULL;
                   $editrow['salescenter_id'] = NULL;                            
                   break;
              default:
                   break;
             }                                  
          FrauDalert::whereIn('id',$ids)->update($editrow);
      }          
  }

这是这种类型的错误 sqlSTATE [42S22]:找不到列:1054“字段列表”中的未知列“ 0”(sql:更新fraud_alerts设置0 = vandan@gmail.com,updated_at = 2020- 10-15 10:20:32其中({228)中的id

这是$ requestData的dd

array:6 [▼
 "_token" => "sTUoBilbfwZfp0x6tSdZhB4S5YQTO7l0xlip0QzA"
 "clientId" => "102"
 "fid" => array:2 [▼
   0 => "228"
   1 => "231"
 ]
 "edit_email" => array:2 [▼
   0 => "van@gmail.com"
   1 => "demo@gmail.com"
 ]
 "edit_email_alert_level" => array:2 [▼
   0 => "sclocation"
   1 => "client"
 ]
 "edit_locations" => array:2 [▼
   0 => "12"
   1 => "3"
 ]

]

这是模型

protected $fillable = ['email','phone','alert_level','client_id','salescenter_id','location_id','added_by','added_for_client','type'];

解决方法

下面的代码更新数据的各个条目:-

if(!empty($requestData['edit_email']) && count($requestData['edit_email']) > 0){
    foreach($requestData['edit_email'] as $i => $list){

           $ids = $requestData['fid'][$i]; //current id
           $editdata = array();
           $editrow['email']=$requestData['edit_email'][$i];
           $editrow['phone'] = NULL;

           switch($requestData['edit_email_alert_level'][$i]){
              case 'client':
                   $editrow['alert_level'] = "client";
                   $editrow['client_id'] = (!empty($requestData['edit_locations'])) ? implode(",",$requestData['edit_locations']) : NULL;
                   $editrow['salescenter_id'] = NULL;
                   $editrow['location_id'] = NULL; 
                   break;
              case 'salescenter':
                   $editrow['alert_level'] = "salescenter";
                   $editrow['client_id'] = NULL;
                   $editrow['salescenter_id'] = (!empty($requestData['edit_locations'])) ? implode(",$requestData['edit_locations']) : NULL;
                   $editrow['location_id'] = NULL;
                   break;
              case 'sclocation':
                   $editrow['alert_level'] = "sclocation";
                   $editrow['location_id'] = (!empty($requestData['edit_locations'])) ? implode(",$requestData['edit_locations']) : NULL; 
                   $editrow['client_id'] = NULL;
                   $editrow['salescenter_id'] = NULL;                            
                   break;
              default:
                   break;
             }                                  
          FraudAlert::where('id',$ids)->update($editrow);
      }          
  }

您的代码的问题是您正在更新两个条目中的数据,但是两行的数据都相同。