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

Laravel验证子分类名称同分类下唯一及Undefined变量报错解决

解决Laravel子分类名称同分类唯一验证的Undefined Variable错误

这个问题我之前也碰到过,核心原因是闭包函数的作用域隔离——你在Rule::unique的闭包里直接调用$request,但闭包默认无法访问外部方法里的变量,所以PHP就抛出了Undefined variable: request的错误。

要修复这个问题很简单,只需要在闭包参数后面加上use ($request),把外部的$request变量引入闭包的作用域即可。修正后的完整代码如下:

public function update(Request $request, $id) {
    $validatedData = $request->validate([
        'category_id' => 'required|numeric|min:1',
        'name' => [
            'required',
            'max:255',
            Rule::unique('sub_categories')->ignore($id)->where(function($query) use ($request) {
                return $query->where('category_id', $request->category_id);
            })
        ],
    ]);
}

额外小技巧(Laravel 8+适用)

如果你的Laravel版本是8及以上,可以用箭头函数简化代码,箭头函数会自动继承外部作用域的变量,不用手动写use:

public function update(Request $request, $id) {
    $validatedData = $request->validate([
        'category_id' => 'required|numeric|min:1',
        'name' => [
            'required',
            'max:255',
            Rule::unique('sub_categories')->ignore($id)->where(fn($query) => 
                $query->where('category_id', $request->category_id)
            )
        ],
    ]);
}

这样修改后,就能正确验证sub_categories表中同一category_id下的name字段唯一,同时忽略当前正在更新的那条记录啦。

内容的提问来源于stack exchange,提问作者GAURAV PAWAR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 13:19:07