2013-02-18 13 views
5

Próbuję utworzyć nową migrację dla mojego tabeli użytkowników, Mam następujący schemat:laravel 4 - Artisan błąd SQLSTATE [42000]

 Schema::create('users', function($t) { 
      $t->increments('id'); 
      $t->string('username', 16); 
      $t->string('password', 64); 
      $t->integer('role', 64); 
      $t->timestamps(); 
    }); 

Kiedy próbuję uruchomić php rzemieślnik migrować z terminala, pojawia się następujący 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 users (id int unsigne d not null auto_increment primary key, username varchar(16) not null, password varchar(64) no t null, role int not null auto_increment primary key, created_at timestamp default 0 not null , updated_at timestamp default 0 not null)) (Bindings: array (
))

błąd ma coś wspólnego z polem „roli”, a gdy ten zostanie usunięty wydaje się działać dobrze.

Z góry dziękujemy za pomoc lub wgląd.

+0

Dlaczego wygenerowany SQL ustawia "rolę" na "auto_increment primary key"? Co jest nie tak z tym, że 'id' jest jedyną kolumną' auto_increment primary key'? –

Odpowiedz

13

Drugi parametr dla integer jest znacznikiem automatycznej inkrementacji.

public function integer($column, $autoIncrement = false, $unsigned = false) 

https://github.com/laravel/framework/blob/5.4/src/Illuminate/Database/Schema/Blueprint.php#L510

+0

super, dzięki za pomoc i zasoby :) Podstęp! – ChrisBratherton

+0

@TheRabbitFactory, Wiem, że to jakiś czas temu, ale czy wiesz, co muszę zrobić, ponieważ mam ten sam problem, co Ty – Thom

+0

Nie pamiętam, ale myślę, że zasadniczo brakowało mi tego drugiego parametru. – ChrisBratherton

0
$t->integer('role', false); 

To rozwiązuje go.

+3

Czy możesz wyjaśnić, dlaczego to rozwiązuje? –

+0

Odpowiedź bez wyjaśnienia nie ma sensu. –

+0

przez ustawienie liczby całkowitej na false i wyłączenie autoIncrement, dlatego pomijamy błąd. –

0

Długość atrybutu liczby całkowitej jest niedozwolona. Usuń i spróbuj.