Laravel 4 Ошибка миграции - создает два поля первичных ключей auto_increment

Я сделал переход с этой настройкой:

$table->increments('id');
$table->integer('user_id', 10)->unsigned(); // this is meant to be used as a foreign key

После выполнения миграции php artisan возвращается ошибка:

[Exception]                                                                                                                                                                                 
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: create table `transactions` (`id` int unsigned not null auto_increment primary key, `user_id` int unsigned not null auto_increment primary key) default character set utf8 collate utf8_unicode_ci) (Bindings: array ())

Я не указывал user_id как первичный ключ auto_increment, но Migration рассматривает его как таковой.

Как я могу сделать внешний ключ в Migrations?

Ответ 1

@crynobone: Второй параметр используется для логического использования для определения первичного ключа, нет опции длины для целого числа.

Смотрите здесь: https://github.com/laravel/laravel/issues/2212#issuecomment-21608193

Ответ 2

В Laravel 4 второй параметр в целочисленной функции указывает, что целочисленный столбец будет автоматически увеличиваться или нет (и, следовательно, первичный ключ или нет) В моем случае, чтобы добавить автоматически увеличивающийся идентификатор в таблице, я пишу его так:

$table->integer('id' , true);

Он создает целочисленный столбец с 11 цифрами.

Ответ 3

Почему бы не указать user_id в качестве первичного ключа с автоинкрементами?

$table->increments('user_id');
// other columns
...

Конструктор схем создает user_id, который содержит 10 цифр, без знака и первичный ключ.