Laravel, заставляющий уникальное правило игнорировать данный идентификатор не работает

Я пытаюсь игнорировать уникальную роль для данного идентификатора, но получаю следующую ошибку:

SQLSTATE [23000]: нарушение ограничения целостности: 1062 Повторяющаяся запись
[email protected] для ключа users_email_unique (SQL: обновление users
задавать name = Имя, email = [email protected], updated_at знак равно
2018-04-06 10:01:27 где id = 1)

В моем UserUpdateRequest класс у меня есть правила, установленные:

public function rules()
{
return [
'email' => 'required|email|unique:users,email,' . $this->route()->parameter('user'),
'name' => 'required',
];
}

$this->route()->parameter('user') получает текущий идентификатор модели.

Не уверен, что я делаю не так с моими правилами здесь, у кого-нибудь есть идеи?

Вот где я звоню в обновление:

public function update(Requests\UserUpdateRequest $request, $id)
{
$result = $this->service->update($request->except(['_token', '_method']));

if ($result) {
return back()->with('message', 'Successfully updated');
}

return back()->with('message', 'Failed to update');
}

DB:

введите описание изображения здесь

0

Решение

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

3

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

Проблема заключалась в том, что я не передавал идентификатор пользователя в функцию, поэтому вместо этого он обновлял текущую зарегистрированную запись пользователя, в результате это вызывало бы уникальное правило. Вы можете увидеть в запросе, что он делал WHERE id =1 потому что это обновление с использованием Auth::id();,

0

Это ошибка SQL, у вас есть уникальное ограничение для таблицы SQL. Вероятно, когда вы сделали миграцию, вы добавили table->string("email")->unique()

-1
По вопросам рекламы [email protected]