Laravel多选输入报错:整数值无效,关联表插入失败
问题分析与解决方案
错误原因
- attach方法传参错误:控制器中
$uj->Crew()->attach('crew_ids');传递的是字符串'crew_ids',而非请求中实际的crew_ids数组值,导致SQL尝试将字符串插入整数类型的crew_id字段,触发格式错误。 - UJ模型冗余配置:
fillable数组中包含crew_ids,但多对多关系下,crew_ids并非uj表的字段,属于无效配置。 - 验证规则错误:
crew_ids.*的验证规则里加了|array,但单个crew_id是整数类型,该规则会导致验证逻辑错误。
解决方案
1. 修正控制器的attach传参
将控制器中attach的参数改为请求中的crew_ids数组,同时增加空值判断避免报错:
// 原代码 $uj->Crew()->attach('crew_ids'); // 修正后 if (!empty($validatedData['crew_ids'])) { $uj->Crew()->attach($validatedData['crew_ids']); }
2. 清理UJ模型的冗余配置
移除fillable中的crew_ids字段:
// 原代码 protected $fillable = [ 'nama_event', 'venue', 'tanggal_show', 'fee_pic', 'fee_operator', 'fee_transport', 'notes', 'crew_ids' ]; // 修正后 protected $fillable = [ 'nama_event', 'venue', 'tanggal_show', 'fee_pic', 'fee_operator', 'fee_transport', 'notes' ];
3. 修正验证规则
将crew_ids.*的|array规则改为|integer,确保每个选中的crew_id是整数且存在于crew表:
// 原代码 'crew_ids.*' => 'exists:crew,crew_id|array', // 修正后 'crew_ids.*' => 'exists:crew,crew_id|integer',
额外优化建议
计算total_uang_jalan时处理空值,避免null相加报错:
$totalUangJalan = ($uj->fee_pic ?? 0) + ($uj->fee_operator ?? 0) + ($uj->fee_transport ?? 0);
内容的提问来源于stack exchange,提问作者HILMAN
相关产品推荐
相关产品推荐

