2013-07-26 59 views
11

tôi đã di cư với thiết lập này:Laravel 4 Migration lỗi - tạo ra hai khóa chính auto_increment các lĩnh vực

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

Sau khi thực hiện php nghệ nhân di chuyển nó sẽ trả về một lỗi:

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

tôi không chỉ định user_id là một khóa chính auto_increment nhưng Migration coi nó như vậy.

Làm cách nào để tạo khóa ngoại trong Di chuyển?

Trả lời

21

@crynobone: Tham số thứ hai dành cho việc sử dụng boolean để xác định khóa chính, không có tùy chọn độ dài cho số nguyên.

Tham khảo ở đây: https://github.com/laravel/laravel/issues/2212#issuecomment-21608193

+0

Vậy làm thế nào để bạn xử lý khóa ngoại? – jrenouard

+2

nvm, tìm thấy câu trả lời ở đây http://stackoverflow.com/questions/22077573/laravel-migration-will-not-add-foreign-key bạn nên sử dụng $ table-> integer ('app_group_id') -> length (10) -> unsigned(); trong Laravel 4 – jrenouard

-2

Tại sao không chỉ định user_id trọng như chính với autoincrement?

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

Schema builder tạo user_id, dài 10 chữ số, unsigned & khóa chính.

3

Trong Laravel 4, tham số thứ hai trong hàm nguyên là để chỉ cột nguyên được tự động tăng hoặc không (và do đó khóa chính hoặc không) Trong trường hợp của tôi, để thêm id tăng tự động trong bảng tôi viết như thế

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

Nó tạo cột số nguyên có 11 chữ số.