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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:10:27