Laravel 5

При проверке формы laravel 5 мне нужно, чтобы электронная почта была уникальной только для идентификатора определенного поля в таблице db.

$this->validate($request,[
        'name'=>'required',
        'email' => 'unique:users,email,',
        'password'=>'required',
        ]);
0
Shifas Hassan 21 Авг 2018 в 11:24
1
Определите, пожалуйста, certain field's id?
 – 
Niklesh Raut
21 Авг 2018 в 11:25
Это означает, что у меня есть таблица с именем users, в ней id, name, email, company_id. company_id - это внешний ключ из таблицы компаний, поэтому я хочу, чтобы электронная почта была введена уникальной в таблицу только с учетом company_id, например, если company_id 1, другой company_id 2, поэтому можно добавить электронную почту в таблицу, если company_id отличается, только в остальном нет
 – 
Shifas Hassan
21 Авг 2018 в 11:30

3 ответа

Вы можете попробовать такой способ:

$companyId = $request->get('company_id'); // selected company
$this->validate($request,[
    'name' => 'required',
    'email' => [
        'required',
        "unique:users,email,NULL,id,company_id,$companyId"
    ],
    'password'=>'required',
]);
1
Rafal Migda 21 Авг 2018 в 12:02

Если вы хотите игнорировать определенный идентификатор в базе данных, вы можете использовать ignore. Например, когда пользователь обновляет свой профиль, мы хотим разрешить ему отправлять свой адрес электронной почты, это не должно считаться a not unique.

Вот подробные сведения о документах. И вот ваш код обновлен, чтобы соответствовать этому:

    $this->validate($request,[
        'name'=>'required',
        'email' => [
            \Illuminate\Validation\Rule::unique('users', 'email')->ignore($user->id),
        ],
        'password'=>'required',
    ]);

Однако, если вы хотите игнорировать более чем one id или хотите настроить запрос, вам необходимо добавить предложение where:

    $this->validate($request,[
        'name' => 'required',
        'email' => [
            'required',
            \Illuminate\Validation\Rule::unique('users')->where(function ($query) {
                // Add any constraints you want for the query here.
                return $query->whereNotIn('id', [1, 2, 3, 4]);
            }),
        ],
        'password'=>'required',
    ]);
0
Hamoud 21 Авг 2018 в 11:35

Используйте параметры Third и Fourth, чтобы игнорировать company_id

    $company_id = 1;// Company will be here

И при проверке

    'email' => 'unique:users,email,'.$company_id.',company_id',
0
Niklesh Raut 21 Авг 2018 в 12:03