Laravel проверить уникальное правило без себя в обновлении

У меня есть правила проверки уникальности в разделе обновлений.

При вставке или добавлении уникальное правило 'Email' => array('unique:driver_details'), и он проверит на уникальный столбец.

Но это не удается для раздела обновления. При обновлении он удовлетворяет другим правилам и в уникальном сообщении электронной почты он проверяет себя на наличие уникального столбца и не может увидеть свое поле.

Итак, как я могу проверить уникальность, кроме ее собственного значения в базе данных?

5

Решение

Это заставляет игнорировать конкретный идентификатор:

'email' => 'unique:table,email_column_to_check,id_to_ignore'

заменить сегменты table, email_column_to_check, id_to_ignore в приведенном выше примере

Вы можете проверить это здесь http://laravel.com/docs/4.2/validation#rule-unique

17

Другие решения

Для тех, кто использует Laravel 5 и Form Requests, вы можете получить идентификатор модели привязки Route-Model напрямую как свойство Form Request как $this->name_of_the_model->id а затем использовать его, чтобы игнорировать его из уникального правила.

Например, если вы хотите иметь уникальные электронные письма, но также разрешаете администратору редактировать пользователей, вы можете сделать следующее:

Маршрут:

Route::patch('users/{user}', 'UserController@update');

контроллер:

public function update(UserRequest $request, User $user)
{
// ...
}

Форма запроса:

class UserRequest extends FormRequest
{
// ...
public function rules()
{
return [
'name' => 'required|string',
'email' => [
'required',
'email',
Rule::unique('users')->ignore($this->user->id, 'id')
],
//...
];
}
//...
}

Обратите внимание, что мы игнорируем редактируемого пользователя, который в этом случае может отличаться от аутентифицированного пользователя.

8

Включить правило, написав

use Illuminate\Validation\Rule;

и напишите свой проверочный код следующим образом:

 'Email' => [required,
Rule::unique('driver_details')->ignore($id),
]

Здесь $ id — это идентификатор электронной почты, которую вы хотите игнорировать во время проверки, полученной от контроллера.

2

$request->validate([
'email' => 'unique:table_name,email,' . $user->id
]);
0

Я использую Laravel 5.2

если ваш первичный ключ называется «id»
имя таблицы — users_table, и я хочу обновить user_name
так я делаю так

'user_name'  =>  'required|unique:users_table,user_name,'.$id

если ваш первичный ключ не назван ‘id’
В моем случае мой первичный ключ — user_id, а имя таблицы — users_table, и я хочу обновить user_name.

так я делаю так

'user_name' => 'required|unique:users_table,user_name,'.$id.',user_id'
0
По вопросам рекламы [email protected]