Столбец переноса базы данных Laravel изменен на Уникальный и обнуляемый, вызывая ошибку - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь интегрировать социальные логины с моим существующим приложением laravel.Я пытаюсь изменить адрес электронной почты и пароль на nullable, но мне также нужно, чтобы адрес электронной почты оставался уникальным.При выполнении моей миграции я получаю сообщение об ошибке для дублированного имени ключа 'users_email_unique'

Laravel 5, уже исправлена ​​проблема с enum, которую я имел для изменения столбца.

    Schema::table('users', function (Blueprint $table) {
        $table->string('email')->unique()->nullable()->change();
        $table->string('password')->nullable()->change();
    });

Осветить \ База данных\ QueryException: SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1061 Повторяющееся имя ключа 'users_email_unique' (SQL: изменить таблицу users добавить уникальный users_email_unique (email))

Трассировка исключения:

1 Doctrine \ DBAL \ Driver \ PDOException: :( "SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1061 Повторяющееся имя ключа 'users_email_unique'")

/ vendor / doctrine / dbal /lib / Doctrine / DBAL / Driver / PDOStatement.php: 119

2 PDOException: :( "SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1061 Повторяющееся имя ключа 'users_email_unique'")

/ vendor / doctrine / dbal / lib / Doctrine / DBAL / Driver / PDOStatement.php: 117

Редактировать

Если я удалю Unique () из электронной почты, произойдетон остается уникальным, так как это было ранее установлено в другой миграции?

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Понял это сам, как упомянуто в комментарии к ответу выше.

Просто потому, что таблица уже была создана с помощью unique (), если я удалю ее, это позволит выполнить миграцию, а также сохранит функциональность unique (), которая была в исходной миграции таблицы пользователя.

0 голосов
/ 22 января 2019

Похоже, база данных обнаруживает повторное значение.Это невозможно с пустыми значениями, поэтому это может быть пустая строка.

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

public function setNameOfYourAttribute($value) {
    if ( empty($value) ) {
        $this->attributes['nameofyourattribute'] = NULL;
    }
}

Надеюсь, это поможет.

ПРИМЕЧАНИЕ: Полная документация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...