2013-07-26 11 views
11

zrobiłem migrację z tej konfiguracji:laravel błąd 4 Migracja - tworzy dwa klucze podstawowego AUTO_INCREMENT pola

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

Po wykonaniu php rzemieślnik migrują zwraca błąd:

[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()) 

ja nie Podaj identyfikator użytkownika, aby był kluczem podstawowym auto_increment, ale Migration traktuje to jako tak.

Jak utworzyć klucz obcy w Migracji?

Odpowiedz

21

@crynobone: Drugi parametr służy do określenia wartości klucza kluczowego, nie ma opcji długości dla liczby całkowitej.

Patrz tutaj: https://github.com/laravel/laravel/issues/2212#issuecomment-21608193

+0

Jak radzisz sobie z kluczami obcymi? – jrenouard

+2

nvm, znalazłem odpowiedź tutaj http://stackoverflow.com/questions/22077573/laravel-migration-will-not-add-foreign-key powinieneś użyć $ table-> integer ('app_group_id') -> length (10) -> unsigned(); w Laravel 4 – jrenouard

-2

Dlaczego nie określił user_id jako klucz podstawowy z autoIncrement?

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

Schema Builder tworzyć user_id, który ma długość 10 cyfr, bez znaku & klucz podstawowy.

3

W Laravel 4, drugi parametr w funkcji całkowitej służy do wskazywania, że ​​kolumna całkowita ma być automatycznie zwiększana lub nie (i dlatego kluczem podstawowym lub nie) W moim przypadku, aby dodać automatyczny inkrementowany identyfikator w tabeli, zapisuję go w ten sposób

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

Tworzy kolumnę całkowitą z 11 cyframi.