Laravel更新表报错SQLSTATE[42S22]:未知列'0',求错误排查
问题分析与解决方案
错误SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'field list'的根源是你传递给update方法的是二维数组,而Laravel的update需要接收一维关联数组。
具体错误点
你在定义$arFields时用了$arFields[] = array(...),这会把字段数组包裹在一个外层数组里,最终$arFields的结构是:
[ [ 'lotid' => $lotid, 'lot' => $lot, // ... 其他字段 ] ]
当Laravel处理这个二维数组时,会把外层数组的键(也就是0)当作数据库列名,尝试更新0列,但你的数据库表中没有这个列,所以触发报错。
修复代码
去掉$arFields定义时的[],直接赋值为一维数组:
$flatBuilder = Lot::where('lotid', $lotid); $arFlat = $flatBuilder->first(); // 直接定义为一维关联数组,不要加[] $arFields = array( 'lotid' => $lotid, 'lot' => $lot, 'type' => $type, 'status' => $status, 'price' => $price, 'pricesq' => $pricesq, 'area' => $area, 'floor' => $floor, 'height' => $height ); if ($arFlat) { $flatBuilder->update($arFields); } else { Lot::create($arFields); }
补充说明
至于你提到相同代码在另一个站点正常运行,大概率是巧合或者版本差异:
- 旧版本Laravel的
create方法可能会自动处理二维数组(取第一个元素),但update方法一直要求一维数组 - 另一个站点的代码可能实际没有
[],只是你复制时出现了偏差
内容的提问来源于stack exchange,提问作者Георгий Графов
相关产品推荐
相关产品推荐

