Laravel模型异常:获取单模型后save()批量更新同用户eduinfo记录
问题分析与解决方案
核心问题
你遇到的批量更新问题,根源出在两个关键错误:
- 查询条件字段误用:你用
where("id", $user->id)匹配的是eduinfo表自身的主键id,而非关联用户的外键(通常为user_id),逻辑完全错误。 - 模型主键配置错误(可选):如果你的
eduinfo模型错误将$primaryKey设置为user_id,Laravel会把user_id当作主键,调用save()时会批量更新所有匹配该user_id的记录。
修正代码
第一步:修正查询条件
将查询中的id替换为关联用户的外键(假设为user_id,若你的外键是其他名称,对应修改即可):
public function UpdateEducationData(Request $request) { $user = app('user'); // 修正外键字段为user_id,而非eduinfo的主键id $education = Eduinfo::where("user_id", $user->id) ->where("exam", $request->type) ->firstOrFail(); // 用firstOrFail避免空模型引发的报错 // 批量赋值简化代码(需确保模型设置了$fillable白名单) $education->fill([ 'board' => $request->board, 'year' => $request->year, 'rollno' => $request->rollno, 'obtainmarks' => $request->obtainmarks, 'totalmarks' => $request->totalmarks, 'division' => $request->division, 'grade' => $request->grade, 'totalcgpa' => $request->totalcgpa, 'obtailcgpa' => $request->obtailcgpa ]); $education->save(); return redirect()->back()->with("message", "Education Information Updated Successfully"); }
第二步:检查模型主键配置
打开Eduinfo模型,确保主键设置为表自身的主键(通常是id):
class Eduinfo extends Model { protected $primaryKey = 'id'; // 必须是eduinfo表的主键,而非user_id // 配置可批量赋值的字段白名单 protected $fillable = ['user_id', 'exam', 'board', 'year', 'rollno', 'obtainmarks', 'totalmarks', 'division', 'grade', 'totalcgpa', 'obtailcgpa']; }
额外优化建议
若无需先获取模型实例,可直接用update()方法更高效:
public function UpdateEducationData(Request $request) { $user = app('user'); $updatedRows = Eduinfo::where("user_id", $user->id) ->where("exam", $request->type) ->update([ 'board' => $request->board, 'year' => $request->year, 'rollno' => $request->rollno, 'obtainmarks' => $request->obtainmarks, 'totalmarks' => $request->totalmarks, 'division' => $request->division, 'grade' => $request->grade, 'totalcgpa' => $request->totalcgpa, 'obtailcgpa' => $request->obtailcgpa ]); return redirect()->back()->with( $updatedRows ? "message" : "error", $updatedRows ? "Education Information Updated Successfully" : "No matching record found to update" ); }
内容的提问来源于stack exchange,提问作者Malik Hamza Younas
相关产品推荐
相关产品推荐

