在我的项目中使用 Laravel 5.6 和 MongoDB ,要在更新方法中验证我的输入,我使用如下的验证器,
$validator = Validator::make($request->all(), [
'name' => 'string|max:255',
'phone' => 'string|valid_phone',
'email' => ['string', 'email', 'max:255',
Rule::unique('admins','email')->ignore($id),
],
'password' => 'string|min:6',
'access' => 'numeric',
]);
我希望该字段是唯一的,并为具有特殊$id
的用户忽略相同的电子邮件。
一切看起来都好!但是,当我调用我的路由来更新我的用户并将用户的当前电子邮件作为电子邮件传递时,它会返回一个类似的验证器错误,
"email": [
"The email has already been taken."
]
因此,唯一验证无法正常运行!
我也在我的用户模型中设置了$primaryKey='_id';
。
问题是什么?我错过了什么吗?
答案 0 :(得分:3)
如果您在用户模型中使用$primaryKey='_id'
,则应在ignore
方法中设置第二个参数。以下是文档引用:
如果您的表使用除id之外的主键列名称,您可以 调用ignore方法时指定列的名称
Rule::unique('admins','email')->ignore($id,'_id')