如何在Laravel中更新用户数据内指定技能的等级值?
解决Laravel更新用户指定技能等级的问题
你遇到的核心问题有两个:一是你修改的$matchedSkill只是原技能数组的副本,修改它不会影响$user->skills;二是数据里的等级键是小写的level,你用了大写的Level,而且数组不能用对象的->访问方式。
正确的做法是找到原技能数组中匹配元素的索引,直接修改原数组,再重新赋值给用户模型后保存。修改后的代码如下:
public function UpdateLevelSkill(Request $request) { $level = $request->get('level'); $commonId = $request->get('commonId'); $userId = $request->get('userId'); $user = User::where('microsoftId', $userId)->first(); if (!$user) { return response()->json(['message' => '用户不存在'], 404); } $skills = $user->skills; $skillIndex = -1; // 遍历找到匹配技能的索引 foreach ($skills as $index => $skill) { if ($skill['CommonId'] === $commonId) { $skillIndex = $index; break; } } if ($skillIndex === -1) { return response()->json(['message' => '未找到匹配技能'], 404); } // 修改原数组中的技能等级 $skills[$skillIndex]['level'] = $level; // 将修改后的技能数组重新赋值给用户 $user->skills = $skills; // 保存用户 $user->save(); return response()->json($user->skills[$skillIndex]); }
关键说明:
- 遍历的时候记录
$index,这样能定位到原数组中的位置,修改的是原数组的元素,而不是副本 - 注意数据键名的大小写:你的技能对象里是
level(小写),不是Level,要严格对应 - 增加了用户和技能的存在性判断,避免空值报错
内容的提问来源于stack exchange,提问作者Elodie
相关产品推荐
相关产品推荐

