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

How to get existing database row from exists-rule of a laravel validator?

如何获取使用 Validatorexists 规则找到的值?

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

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

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

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

在我看来,您可以在这里做的最好的事情是从验证器中删除 exists 规则,并在验证通过后立即查询邀请。如果是returnsnull,则手动处理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();