Laravel队列处理CSV文件时Null值未被正常检测的问题
问题原因
- CSV解析后,连续分隔符
,,对应的$item[10]是存在的空字符串,isset()仅会在索引不存在、值为null时返回false,空字符串场景下isset($item[10])始终返回true,所以外层判断没有拦截到空值场景,一定会执行数据插入逻辑。 - 你写的
!empty($item[10])仅用于comment字段的赋值控制,仅会把空值转为null存入表,不会阻止整条记录的插入。
解决方法
根据你的需求选择对应修改方案:
方案1:$item[10]为空时跳过整条记录不插入
把外层判断条件替换为修剪空白后判断非空即可,适配CSV字段可能带空格的空值场景:
public function handle() { foreach ($this->chuck_data as $item){ // 先判断索引存在,再修剪空白后判断值非空 if (isset($item[10]) && trim($item[10]) !== '') { bucket_comment::create([ 'bucket_id' => $claim_file->id, 'disposition_id' => $dispo_id, 'disposition_name' => $disposition, 'followup_date' => $item[13], 'comment' => $item[10], 'bucket_com_create' => Carbon::now('Asia/Kolkata')->format('m/d/Y g:i A'), 'create_date' => Carbon::now('Asia/Kolkata')->format('Y-m-d'), ]); } } }
你也可以直接用Laravel自带的filled()辅助函数简化判断,效果一致:
if (filled($item[10] ?? null))
方案2:需要插入记录,但comment字段不允许为null
如果需求是必须插入整条记录,仅要避免comment字段存null,把三目运算的默认值改成你需要的默认值(比如空字符串)即可:
'comment' => trim($item[10]) ?: '',
内容的提问来源于stack exchange,提问作者hydar_akbar
相关产品推荐
相关产品推荐

