laravel 数组更新多行不同id

laravel array update multiple rows with diffrent ids

当我更新多个数组值然后每次更新不同 ID 中的相同值时我被卡住了,就像我有三个字段,如电子邮件,alert_level 和 select 在 select dropdoewn取决于 alert_level 选择选项,所以现在我想更新所有三个字段,但卡住了

这是我的代码

 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 'field list' 中的未知列“0”(SQL:更新 fraud_alerts 设置 0 = vandan@gmail.com, updated_at = 2020-10-15 10:20:32 其中 id in (228))

这里是 $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);
      }          
  }

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