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

Laravel 8 自定义unique验证规则时无法识别Request变量是什么原因

问题解决方案

错误根因

你遇到的Undefined variable: request报错是PHP闭包的作用域特性导致的:Rule::unique的where方法传入的匿名函数默认不能直接访问父作用域的$request变量,必须通过use关键字手动将外部变量导入闭包的作用域中。

修复代码

方式1:给闭包导入$request变量

public function storeSize(Request $request)
{
    $validated = $request->validate(
        [
            'name' => [
                'required', 
                Rule::unique('sizes')->where(function ($query) use ($request) {
                    return $query->where('speciesId', $request->speciesId);
                })
            ],
            'speciesId' => 'required'
        ]
    );
}

方式2:更简洁的写法(无需闭包)

Laravel的Rule::unique支持直接链式调用where方法传入字段匹配条件,不需要额外写闭包,也就不需要处理作用域问题:

public function storeSize(Request $request)
{
    $validated = $request->validate(
        [
            'name' => [
                'required', 
                Rule::unique('sizes')->where('speciesId', $request->speciesId)
            ],
            'speciesId' => 'required'
        ]
    );
}

内容的提问来源于stack exchange,提问作者Dahliar Ananda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:15:10