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

