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

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

SQLSTATE [23000]: нарушение ограничения целостности: 1062 Повторяющаяся запись [email protected] для ключа users_email_unique (SQL: обновление users set name = 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:

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


person user3574492    schedule 06.04.2018    source источник
comment
Какой первичный ключ в users таблице?   -  person Kyslik    schedule 06.04.2018
comment
@Kyslik Первичный ключ - это столбец id.   -  person user3574492    schedule 06.04.2018
comment
Я думаю, что код правильный, у вас всего две записи в базе данных, и вы пытаетесь изменить первую на адрес электронной почты второй. Из-за нарушения ограничения целостности: 1062 Повторяющаяся запись [email protected] для ключа users_email_unique (SQL: update   -  person Kyslik    schedule 06.04.2018
comment
@Kyslik Вы были правы. Я не передавал идентификатор, поэтому вместо этого он обновлял текущего пользователя, вошедшего в систему. Если вы зададите ответ, я приму.   -  person user3574492    schedule 06.04.2018
comment
Отдай @Matthias S. Удачи! :)   -  person Kyslik    schedule 06.04.2018
comment
не видел, чтобы вы уже ответили на этот вопрос здесь. Извините, я могу удалить свой ответ, и вы можете опубликовать его, если хотите :)   -  person Matthias S    schedule 06.04.2018
comment
@MatthiasS ничего страшного, оставь это.   -  person Kyslik    schedule 06.04.2018


Ответы (3)


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

person Matthias S    schedule 06.04.2018

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

person user3574492    schedule 06.04.2018

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

person Munteanu Petrisor    schedule 06.04.2018
comment
Это должно быть комментарием, а не ответом. - person Kyslik; 06.04.2018