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

Laravel唯一验证优化:需忽略不同用户的重复技能校验

解决Laravel中同一学生不能重复添加技能的联合唯一验证问题

你当前的unique:stu_resume_skills规则是全局校验skill_id的唯一性,导致不同用户也无法添加同一个技能,这不符合需求。正确的做法是设置联合唯一验证,同时校验user_id和skill_id的组合唯一性。

修正后的验证规则(两种写法)

1. 字符串格式(简洁写法)

request()->validate([
    'skill_id' => 'required|exists:jobs_masterskills,id|unique:stu_resume_skills,skill_id,NULL,id,user_id,'.Auth::user()->id,
]);
  • exists:jobs_masterskills,id:确保用户选择的技能存在于技能主表中(替换你原来的skill_id自定义规则,若你的规则是其他用途可保留)
  • unique规则参数解析:表名stu_resume_skills → 验证字段skill_id → 忽略ID(填NULL) → 忽略字段id → 额外条件user_id等于当前登录用户ID

2. 数组格式(可读性更强)

这种写法需要先引入Rule类,在控制器顶部添加:

use Illuminate\Validation\Rule;

然后修改验证规则:

request()->validate([
    'skill_id' => [
        'required',
        'exists:jobs_masterskills,id',
        Rule::unique('stu_resume_skills')->where(function ($query) {
            return $query->where('user_id', Auth::user()->id);
        }),
    ],
]);

完整修正后的控制器代码

use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\Rule;
use App\Models\StudentSkillsModel;

public function SkillsAddFormValue(Request $request)
{
    request()->validate([
        'skill_id' => [
            'required',
            'exists:jobs_masterskills,id',
            Rule::unique('stu_resume_skills')->where(function ($query) {
                return $query->where('user_id', Auth::user()->id);
            }),
        ],
        'expertise_level' => 'required', // 可根据需求添加该字段的验证规则
    ]);

    $save = new StudentSkillsModel;
    $save->user_id = Auth::user()->id;
    $save->skill_id = $request->skill_id;
    $save->expertise_level = $request->expertise_level;

    $save->save();

    return redirect('student/academics/resume/skills/skills-list');
}

设置完成后,系统只会检查当前登录用户是否已添加过该技能,不同用户之间添加同一技能不会受限制。

内容的提问来源于stack exchange,提问作者Mohan Palanisamy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 18:17:16