У меня есть правила проверки уникальности в разделе обновлений.
При вставке или добавлении уникальное правило 'Email' => array('unique:driver_details'),
и он проверит на уникальный столбец.
Но это не удается для раздела обновления. При обновлении он удовлетворяет другим правилам и в уникальном сообщении электронной почты он проверяет себя на наличие уникального столбца и не может увидеть свое поле.
Итак, как я могу проверить уникальность, кроме ее собственного значения в базе данных?
Это заставляет игнорировать конкретный идентификатор:
'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
Для тех, кто использует 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')
],
//...
];
}
//...
}
Обратите внимание, что мы игнорируем редактируемого пользователя, который в этом случае может отличаться от аутентифицированного пользователя.
Включить правило, написав
use Illuminate\Validation\Rule;
и напишите свой проверочный код следующим образом:
'Email' => [required,
Rule::unique('driver_details')->ignore($id),
]
Здесь $ id — это идентификатор электронной почты, которую вы хотите игнорировать во время проверки, полученной от контроллера.
$request->validate([
'email' => 'unique:table_name,email,' . $user->id
]);
Я использую 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'