在Laravel5.7中验证阵列上的重复值

时间:2019-12-10 07:00:24

标签: laravel laravel-5

我想验证数据库中的电子邮件地址是否重复? 这是我的代码:

'users.*.email'=> ['required','unique:users','email']

这是我的控制器

UsersController

public function MassStore(MassStoreUserRequest $request)
{

    $inputs = $request->get('users');
    return redirect()->route('admin.users.index');
}

这是我的POST数据(post data($ inputs)将如下发送):

'users' => [
    [
        'name' => 'Ken Tse',
        'email' => 'ken@gamil.com',
        'password' => 'ken12ken34ken',
    ],
    [
        'name' => 'Ken Tse',
        'email' => 'ken@gamil.com',   //duplicate, so need trigger error
        'password' => 'ken12ken34ken',
    ],
]

这是我得到的错误:

  

[2019-12-10 15:51:16] local.DEBUG:PDOException:SQLSTATE [23000]:违反完整性约束:1062键“ ken@gamil.com”的条目“ users_email_unique”重复< / p>

MassStoreUserRequest

public function rules()
{
    return [
        'users'                => ['required','array'],
        'users.*.name'         => ['required'],
        'users.*.email'        => ['required','unique:users','email'],
        'users.*.password'     => ['required','min:8']
    ];
}

3 个答案:

答案 0 :(得分:3)

要防止在数组中提交重复数据,可以使用distinct规则:

return [
    'users'            => ['required', 'array'],
    'users.*.name'     => ['required'],
    'users.*.email'    => ['required', 'email', 'distinct', 'unique:users'],
    'users.*.password' => ['required', 'min:8'],
];

答案 1 :(得分:2)

只需在电子邮件关键字(例如:

)中使用“ distinct”
public function rules()
{
    return [
        'users'                => ['required','array'],
        'users.*.name'         => ['required'],
        'users.*.email'        => ['required','unique:users','email', 'distinct'],
        'users.*.password'     => ['required','min:8']
    ];
}

答案 2 :(得分:1)

请尝试这样使用:

$rules = array(
            "name" => "required",
            "email" => "required|email|unique:users",
             "password" => "required|min:6",

        );