Laravel 表单验证:验证数据库记录是否存在
问题
我们怎样验证数据库记录是否存在呢?假设我们表单的提交字段为 email
,如果数据库表 users
的 email
字段中存在提交的数据,则验证不通过。
答案
我们可以使用 exists
验证方法进行处理。
request()->validate([
'email' => 'exists:users,email',
]);
上面的验证规则表示如果 users
表的 email
字段存在对应的数据,则验证不通过。
有时,你可能需要指定要用于「exists」查询的特定数据库连接。你可以使用「点」语法将连接名称添加到表名称前来完成此操作:
'email' => 'exists:connection.users,email'
如果您想自定义验证规则执行的查询,您可以使用 Rule
类来流畅地定义规则。在下面的例子中,我们还以数组的形式指定验证规则,而不是使用 |
字符来分隔它们:
use Illuminate\Validation\Rule;
Validator::make($data, [
'email' => [
'required',
Rule::exists('users')->where(function ($query) {
$query->where('account_id', 1);
}),
],
]);