如果 laravel 中已经存在具有特定 ID 的电子邮件,如何防止插入电子邮件?
Posted
技术标签:
【中文标题】如果 laravel 中已经存在具有特定 ID 的电子邮件,如何防止插入电子邮件?【英文标题】:How to prevent insert email if already exist with specific id in laravel? 【发布时间】:2017-01-28 05:34:30 【问题描述】:我有一个表,我试图在其中存储电子邮件地址。这些电子邮件地址将保存为user_id
。
例如在email_list
表中
|ID | user_id | email |
...............................
| 1 | 101 | john@gmail.com |
...............................
| 2 | 102 | john@gmail.com |
在上表中,您可以看到相同的电子邮件地址以不同的user_id
保存,这就是我想要做的。
目前我正在尝试像这样简单的 laravel 验证。
'email' => 'required|unique:email_list|email',
如果行具有相同的user_id
,有没有办法检查已经存在的电子邮件地址?我正在使用 laravel 5.2。如果有人指导我,我将不胜感激。谢谢
3 小时后编辑
我还在 github 中添加了与issue 相同的问题。有人说我必须创建自己的验证规则。
【问题讨论】:
如果电子邮件已经存在且具有相同的 user_id,您是否希望它恢复为有效?同样,如果电子邮件已经存在且具有不同的 user_id,您是否希望它返回有效?'email' => 'unique:email_list,email,'.$user->id.',user_id'
- 记录在rule-unique下
@alaric 你我想要你的第一个条件
@BenSwinburne 感谢您的指导,让我检查一下
请重新表述您的问题。目前尚不清楚您要达到的目标。
【参考方案1】:
强制使用唯一规则以忽略给定 ID
您可以指定要忽略的 ID 作为可选的第三个参数。此外,如果您的表使用 id 以外的主键列名,您可以将其指定为可选的第四个参数
'email' => "unique:$table,$field,$user->id,$idField"
所以在你的情况下,它会如下
'email' => "unique:email_list,email,$user->id,user_id'
【讨论】:
在第三个参数中我必须输入用户 ID 对吗?喜欢 102 吗? 它返回一个错误QueryException in Connection.php line 729: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'assa@exy.com' for key 'email_list_email_unique' (SQL: insert into email_list (email, u_id, updated_at, created_at) values (assa@exy.com, 102, 2016-09-20 10:59:11, 2016-09-20 10:59:11)
如果您忽略 ID,它将始终验证并插入。当您回复@alaric 时,您的意思是第二个条件。在这种情况下,5.2 不支持开箱即用。如果电子邮件地址存在,但不属于该用户,您需要验证表单。如果它存在并且属于用户,则表单不应验证。您需要扩展验证器 - 我会为您更新我的答案。
我想阻止插入是否存在具有相同用户 ID 的相同电子邮件地址,例如在我添加有问题的表中,第一条和第二条记录不应再次添加。但是如果用户 id 是103
,那么它应该像| 3 | 103| john@gmail.com
这样添加到表中。感谢您的关注。
我在问题中添加了一些文字,您可以查看它。赞赏...【参考方案2】:
这是违反存在规则的。 首先,根据字段是否有效的条件进行存在规则检查。 我认为,如果我们将其用作对立面,那么它对您很有用。
例如:-
'email' => 'exists:email_list,email,user_id,!102'
即,
'email' => 'exists:email_list,email,user_id,!'. $user_id
否则,
'email' => 'exists:email_list,email,user_id,!'. Input::get(user_id)
在使用输入和导入时
use Illuminate\Support\Facades\Input;
并更改消息内容 请尝试这些并回复发生了什么..或者它对你有用..?
【讨论】:
以上是关于如果 laravel 中已经存在具有特定 ID 的电子邮件,如何防止插入电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章
检查文件夹是不是已经存在,如果没有在 laravel 中通过 id 创建一个新文件夹
如何使用jquery知道是不是存在具有特定ID的div [重复]