You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel多选输入报错:整数值无效,关联表插入失败

问题分析与解决方案

错误原因

  1. attach方法传参错误:控制器中$uj->Crew()->attach('crew_ids');传递的是字符串'crew_ids',而非请求中实际的crew_ids数组值,导致SQL尝试将字符串插入整数类型的crew_id字段,触发格式错误。
  2. UJ模型冗余配置:fillable数组中包含crew_ids,但多对多关系下,crew_ids并非uj表的字段,属于无效配置。
  3. 验证规则错误: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 15:40:35