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

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,提问作者Георгий Графов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 21:32:08