如何从laravel验证器的exists-rule获取现有数据库行?

时间:2017-03-05 01:55:00

标签: php laravel laravel-validation

如何获得exists的{​​{1}}规则中找到的值?

Validator

我不想向数据库发出第二个请求,它已经由验证器完成。

$validator = Validator::make($request->all(), [
    'invite' => 'required|max:30|exists:invites,code',
]);

1 个答案:

答案 0 :(得分:1)

没有办法做到这一点。 exists语句返回一个布尔值。这是exists规则的作用。

在这里,您可以做的最好的事情是从验证程序中删除exists规则,并在验证通过后,查询邀请。如果它返回null,则手动处理abort()

    $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();