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
相关产品推荐
相关产品推荐

