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

Laravel 5更新contrato时遇SQLSTATE[42S22]列未找到错误求助

解决SQLSTATE[42S22]字段找不到的问题

首先看你给出的错误信息:

SQLSTATE[42S22]: Column not found: 1054 Unknown column ' contrato' in 'where clause' (SQL: select count(*) as aggregate from contratos where contrato = 3261026)

你仔细看就能发现—— contrato字段名前面多了个多余的空格!这就是问题的核心:你的验证规则里指定的字段名不小心带了空格,导致Laravel生成的SQL里字段名带了空格,数据库自然找不到这个列。

结合你说的“修改时忽略当前用户”的验证需求,大概率是在unique规则里写错了字段名格式。比如你可能写成了这样:

$request->validate([
    'contrato' => 'required|unique:contratos, contrato,' . $id,
    // 这里的" contrato"前面多了空格!
]);

修复步骤

把验证规则里字段名的空格去掉,改成正确的写法就行:

public function update(Request $request, $id)
{
    $request->validate([
        'contrato' => 'required|unique:contratos,contrato,' . $id,
        // 字段名直接写contrato,没有多余空格
    ]);

    // 后续的用户更新逻辑...
}

这样Laravel生成的SQL就会使用正确的contrato字段,既解决了字段找不到的错误,也能正常实现“修改时忽略当前用户、避免重复contrato提示”的需求。说白了就是个容易忽略的拼写小失误,把空格删掉就搞定了。

内容的提问来源于stack exchange,提问作者Shalom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:23:13