2013-07-26 1 views
11

Я сделал миграцию с этой установкой:Laravel ошибка 4 Миграции - создает два AUTO_INCREMENT первичных ключей полей

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

После выполнения PHP ремесленника мигрируют возвращает ошибку:

[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?

ответ

21

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

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

+0

Как вы относитесь к внешним ключам? – jrenouard

+2

nvm, нашел ответ здесь http://stackoverflow.com/questions/22077573/laravel-migration-will-not-add-foreign-key вы должны использовать $ table-> integer ('app_group_id') -> length (10) -> без знака(); в Ларавеле 4 – jrenouard

-2

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

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

схема строитель создать user_id, длиной 10 цифр, без знака & первичного ключа.

3

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^