Laravel - 验证唯一时从登录用户中排除行

时间:2016-12-11 15:51:47

标签: database laravel

如何在验证必须唯一的内容时从登录用户中排除该行(除了来自用户本身的行)?

提前致谢!

2 个答案:

答案 0 :(得分:2)

你的问题不是很清楚。如果您正在谈论用户个人资料更新(当用户必须拥有唯一的电子邮件,但他的电子邮件已经在数据库中)时,您应该从文档中阅读:

  

有时,您可能希望在唯一检查期间忽略给定的ID。例如,考虑一个“更新配置文件”屏幕,其中包括用户的名称,电子邮件地址和位置。当然,您需要验证电子邮件地址是否唯一。但是,如果用户只更改名称字段而不是电子邮件字段,则不希望抛出验证错误,因为用户已经是电子邮件地址的所有者。

     

为了指示验证者忽略用户的ID,我们将使用Rule类来流畅地定义规则。在此示例中,我们还将验证规则指定为数组,而不是使用|用于划分规则的字符:

use Illuminate\Validation\Rule;

Validator::make($data, [
    'email' => [
        'required',
        Rule::unique('users')->ignore($user->id),
    ],
]);

答案 1 :(得分:1)

您可以在验证规则中传递登录用户的ID - getDownloadURL(),如下所示:

unique
  

$validator = Validator::make($request->all(), [ 'email' => 'unique:users,email,' . auth()->id, ]); // This will validate unique email in users table except the column referenced to the logged in user id.

     

详细了解unique规则

希望这有帮助!