@GrimJack

Почему не устанавливается PK и AI для поля?

После некоторых манипуляций, хочу установить поле id автоинкрементом
делаю так
Schema::table('users', function (Blueprint $table) {
            $table->primary('id')->change();
        });
        Schema::table('users', function (Blueprint $table) {
            $table->increments('id')->change();
        });

Однако пулчаю ошибку
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '0' for key 'PRIMARY' (SQL: alter table `users` add primary key `users_id_primary`(`id`))

Если делать без $table->primary то вот такое:
SQLSTATE[42000]: Syntax error or access violation: 1075 Incorrect table definition; there can be only one auto column and it must be defined as a key (SQL: ALTER TABLE users CHANGE id id INT UNSIGNED AUTO_INCREMENT NOT NULL)

Подскажите, как правильно перевести поле в автоинкремент?

PS
Если выполнить sql из ошибки
alter table `users` add primary key `users_id_primary`(`id`)
То получаю ошибку Invalid default value fo created_at
DDL таблицы
CREATE TABLE `users` (
  `email` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `remember_token` varchar(255) NOT NULL,
  `role` varchar(255) NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
  • Вопрос задан
  • 315 просмотров
Пригласить эксперта
Ответы на вопрос 2
amelihovv
@amelihovv
Фулстек веб разработчик
Попробуйте сначала удалить эту колонку, а затем создать.
Schema::table('users', function (Blueprint $table) {
    $table->dropColumn('id');
});
Schema::table('users', function (Blueprint $table) {
    $table->increments('id');
});
Ответ написан
@AVKor
Сообщения об ошибках:
Integrity constraint violation: 1062 Duplicate entry '0' for key 'PRIMARY'

Incorrect table definition; there can be only one auto column and it must be defined as a key

читать кто должен, дядя?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы