2013-02-18 38 views
5

tôi đang cố gắng để tạo ra một sự chuyển đổi mới cho bảng người dùng của tôi, tôi có giản đồ sau:Laravel 4 - Artisan lỗi SQLSTATE [42000]

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

Khi tôi cố gắng chạy php nghệ nhân di chuyển từ nhà ga, Tôi nhận được lỗi sau:

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

Lỗi có liên quan đến trường 'vai trò', khi điều này bị xóa, dường như hoạt động tốt.

Cảm ơn trước vì bất kỳ trợ giúp hoặc thông tin chi tiết nào.

+0

Tại sao SQL được tạo đặt 'vai trò' thành' auto_increment khóa chính'? Có gì sai với 'id' là cột' auto_increment primary key' duy nhất? –

Trả lời

13

Tham số thứ hai cho integer là cờ tăng tự động.

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

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

+0

tuyệt vời, cảm ơn sự giúp đỡ và nguồn lực :) Đã làm các trick! – ChrisBratherton

+0

@TheRabbitFactory, tôi biết nó là một thời gian trước đây, nhưng bạn có biết những gì tôi cần làm, bởi vì tôi có cùng một vấn đề như bạn – Thom

+0

Tôi không thực sự nhớ nhưng tôi nghĩ rằng tôi về cơ bản là thiếu tham số thứ hai. – ChrisBratherton

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

Đó sửa chữa nó.

+3

Bạn có thể giải thích lý do tại sao sửa chữa nó? –

+0

Trả lời mà không cần giải thích là không sử dụng. –

+0

bằng cách đặt số nguyên thành false i vô hiệu hóa autoIncrement đây là lý do tại sao chúng tôi bỏ qua lỗi. –

0

Thuộc tính độ dài của số nguyên không được phép.Loại bỏ và thử.