Я пытаюсь игнорировать уникальную роль для данного идентификатора, но получаю следующую ошибку:
SQLSTATE [23000]: нарушение ограничения целостности: 1062 Повторяющаяся запись
[email protected] для ключа users_email_unique (SQL: обновлениеusers
задаватьname
= Имя,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:
Ошибка возникает потому, что вы пытаетесь сохранить дубликат записи в вашей базе данных. Вы можете видеть, что в ваших индексах все электронные письма должны быть уникальными.
Если вы попытаетесь изменить запись на адрес электронной почты, который уже используется кем-то другим, вы получите сообщение об ошибке ограничения целостности.
Проблема заключалась в том, что я не передавал идентификатор пользователя в функцию, поэтому вместо этого он обновлял текущую зарегистрированную запись пользователя, в результате это вызывало бы уникальное правило. Вы можете увидеть в запросе, что он делал WHERE id =1
потому что это обновление с использованием Auth::id();
,
Это ошибка SQL, у вас есть уникальное ограничение для таблицы SQL. Вероятно, когда вы сделали миграцию, вы добавили table->string("email")->unique()