为什么附加的查询约束在;“唯一验证规则”;用Laravel文档中的闭包构建?

为什么附加的查询约束在;“唯一验证规则”;用Laravel文档中的闭包构建?,laravel,Laravel,我指的是添加额外Where子句的章节 在文档示例中,附加查询在闭包中返回: 'email' => Rule::unique('users')->where(function ($query) { return $query->where('account_id', 1); }) 在我的应用程序中,我通过以下方式验证我的请求: $request->validate([ 'display_name' => [ 'required',

我指的是添加额外Where子句的章节

在文档示例中,附加查询在闭包中返回:

'email' => Rule::unique('users')->where(function ($query) {
    return $query->where('account_id', 1);
})
在我的应用程序中,我通过以下方式验证我的请求:

$request->validate([
    'display_name' => [
        'required',
        'string',
        'between:3,32',
        Rule::unique('devices')->where(function ($query) {
            return $query->where('user_id', auth()->id());
        })
    ],
    // ...
]);
如果我省略了闭包,我的代码似乎仍能按预期工作:

$request->validate([
    'display_name' => [
        'required',
        'string',
        'between:3,32',
        Rule::unique('devices')->where('user_id', auth()->id())
    ],
    // ...
]);

使用闭包是否有特殊的原因,如示例中所示?

我非常怀疑它是否有区别。它看起来像规则::UNIQUE()/Cux>方法正在返回一个查询生成器对象(用于雄辩的基础),并生成一个预先生成的<代码>的基础查询,选择“区别”?从设备。在这一点上,您可以将其作为普通的生成器对象进行交互。而
Builder::where()
提供了您在那里使用的两种语法

如果提供闭包而不是字段/(运算符)/值参数,则生成的查询条件将放在括号中。所以你可以做一些事情,比如
selectdistinct?来自哪里的设备?或(?和?