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);
}
}
您的代码存在问题,您正在更新两个条目中的数据,但两行的数据相同。
当我更新多个数组值然后每次更新不同 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
的 ddarray: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);
}
}
您的代码存在问题,您正在更新两个条目中的数据,但两行的数据相同。