Php 如何从laravel验证器的exists规则中获取现有数据库行?

Php 如何从laravel验证器的exists规则中获取现有数据库行?,php,laravel,laravel-validation,Php,Laravel,Laravel Validation,如何获取通过验证器的exists规则找到的值 $validator = Validator::make($request->all(), [ 'invite' => 'required|max:30|exists:invites,code', ]); 我不想对数据库发出第二个请求,它已经由验证器完成了 Invite::where('code', $value) 那是不可能的。exists语句返回布尔值。这就是规则存在的功能 在我看来,在这里您可以做的最好的事情是从验证器中

如何获取通过
验证器的
exists
规则找到的值

$validator = Validator::make($request->all(), [
    'invite' => 'required|max:30|exists:invites,code',
]);
我不想对数据库发出第二个请求,它已经由验证器完成了

Invite::where('code', $value)

那是不可能的。
exists
语句返回布尔值。这就是
规则存在的功能

在我看来,在这里您可以做的最好的事情是从验证器中删除
exists
规则,并且在验证通过之后,您查询invite。如果返回
null
,则手动处理
abort()


Zend framework将行存储在验证器中,我希望laravel也会这样做。@shukshin.ivan即使它可以存储值,规则
的sql查询也会返回布尔值。您始终可以从服务提供商处创建自己的验证规则,但我建议改用我编写的方法。查询在哪里创建?没有在validator codecan中找到它。您可以帮助查找负责创建查询的代码吗?@shukshin.ivan您可以看到查询是如何内置的(浏览回购协议),但这不是您应该解决此问题的方式。有时,我们通过过早的优化使事情变得过于复杂。如果您仍然关心这个问题,我可以帮助您编写自定义验证规则(这不会比我上面提供的示例更好)。
    $validator = Validator::make($request->all(), [
        'invite' => 'required|max:30',
    ]);

    if ($validator->fails()) {
        return redirect('some/route')
                    ->withErrors($validator)
                    ->withInput();
    } 
    // now check for existance
    else if (! $invite = Invite::where('code', $request->code)->first()) {
        return abort(404, 'Invitation not found');
    }

    $invite->someMethod();