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

Laravel编辑学生数据提交时出现SQLSTATE[42S22]字段不存在错误如何解决

报错原因

你遇到的SQL字段不存在报错,核心问题是store控制器中User::updateOrCreate()的参数结构不符合Laravel规范:
Laravel的updateOrCreate()方法要求接收两个独立的一维数组参数:

  • 第一个参数:查询匹配条件,用于查找是否存在对应记录
  • 第二个参数:需要更新或新增的字段数据

你的代码错误地将两个参数合并到了同一个数组中,还为查询条件多套了一层中括号,导致Eloquent解析查询规则时,把ID的值(报错中的5)错误识别为要查询的字段名,最终抛出字段不存在的异常。

修复方案

1. 修正updateOrCreate参数结构

把store方法中错误的User查询代码替换为正确结构:

// 原来的错误代码删除,替换为以下内容
$userData = [
    'role' => 'siswa',
    'name' => $request->nama_depan,
    'email' => $request->email,
    'email_verified_at' => now(),
    'remember_token' => Str::random(60),
];
// 仅新增用户时设置默认密码,编辑时不重置密码
if (empty($request->id)) {
    $userData['password'] = bcrypt('rahasia');
}

$user = User::updateOrCreate(
    // 第一个参数:查询条件
    ['id' => $request->id],
    // 第二个参数:更新/新增数据
    $userData
);

2. 补充编辑接口返回的user_id字段

当前edit方法的查询语句没有返回关联的用户ID,会导致前端赋值user_id时为空,修改查询的select部分即可:

$siswa = Siswa::select(
    "siswa.id", 
    "siswa.nama_depan",
    "siswa.nama_belakang", 
    "siswa.jenis_kelamin", 
    "users.id as user_id", // 新增此行获取关联用户ID
    "users.email as email",
    "siswa.agama",
    "siswa.alamat"
)
->join('users', 'users.id', '=', 'siswa.user_id')
->where('siswa.id', $id)
->first();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:27:03