Estou trabalhando em um aplicativo no Laravel 4 que requer duas tabelas users
e user_profiles
. A user_id
coluna in user_profiles
é uma chave estrangeira para id
in users
. Eu estava tentando fazer isso:
$table->increments('id');
$table->integer('user_id')->unsigned(); // this is meant to be used as a foreign key
No entanto, depois de fazer php artisan migrate
isso, ocorrerá um erro:
[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 (
))
O problema com o Laravel 4 é que, para inteiros, ele tenta criar um inteiro sem sinal de comprimento (11) enquanto as chaves primárias são inteiros de comprimento (10).
Para superar esse problema, você pode usar unsignedInteger()
Isso resolverá o problema:
$table->increments('id');
$table->unsignedInteger('user_id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');