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
contratoswherecontrato= 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
相关产品推荐
相关产品推荐

