如果 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 创建一个新文件夹

检查具有特定id的用户是否已登录laravel 5.2

获取具有所有属性的 Laravel 模型

如何使用jquery知道是不是存在具有特定ID的div [重复]

如何使用 Laravel 8 验证 MySQL 表中是不是存在哈希码

Laravel Eloquent - 从相关模型中检索特定列