Pio*_*trG 5 database validation laravel
我正在尝试思考如何处理这个用例。
我有一个具有唯一数据库字段(电子邮件)的用户模型。我也在使用软删除。
我需要处理三种情况:
1)更新用户模型。目前,我的验证阻止用户更新,因为这封电子邮件当然已经存在。我认为如果电子邮件未更改,通过忽略电子邮件验证可以轻松解决此问题。
2) 更新了不同的用户模型,并将电子邮件更改为数据库中已存在的另一个电子邮件。
3)创建了一个新模型,并且电子邮件已存在于数据库中。
所有上述场景还必须考虑软删除模型。
有人对如何构建这个有一些建议吗?
对于更新,您可以调整验证规则以在更新时忽略当前用户记录。规则签名是这样的:
'email' => 'unique:user,email,{$userId},id,deleted_at,NULL'
为了插入新的,像这样的规则:
'email' => 'unique:user,email,NULL,NULL,deleted_at,NULL'
应该工作并忽略softDeleted记录。如果数据库上有唯一键,仍然会失败。
当然,如果您还取消删除一条记录,则会出现重复项,这是 Laravel 无法阻止的。
您可以使用Rule::unique()验证。如果您使用模型绑定,则可以从路由中获取用户模型,或者执行传统的数据库查询,通过 ID 获取用户(如果您传入 ID)。然后您可以在验证中执行此操作。
这也应该适应软删除模型。
return [
'email' => Rule::unique('users', 'email')->ignore($user->email)->whereNull('deleted_at')->orWhereNotNull('deleted_at')
]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8117 次 |
| 最近记录: |