2014-09-10 21 views
8

Tôi đã tìm kiếm xung quanh và câu hỏi được hỏi một vài lần, nhưng không ai có thể đưa ra câu trả lời rõ ràng cho nó. Làm thế nào để bạn xác định chiều dài số nguyên cho cột bảng bằng cách sử dụng lược đồ?Chiều dài bộ tạo lược của một số nguyên

Tôi đã nhìn thấy một ai đó gợi ý:

$table->integer('post')->length(11); 

Nhưng điều đó không làm việc - ít nhất là với Laravel 4.2 - nó vẫn tạo ra cột như int(10).

Có phương pháp tích hợp để chỉ định độ dài số nguyên không?

+1

Đây có phải là cơ hội liên quan đến việc tạo khóa ngoại giữa các bảng không? – jeteon

Trả lời

15

Nếu bạn đang sử dụng MySQL, bạn không thể chỉ định độ dài của cột số nguyên. Bạn chỉ có thể chọn giữa một trong các loại số nguyên có sẵn, được mô tả tại http://dev.mysql.com/doc/refman/5.1/en/integer-types.html.

Do đó, bạn không thể đặt độ dài nguyên trong Laravel. Bạn chỉ có thể chọn một trong các loại có sẵn được mô tả tại http://laravel.com/docs/schema#adding-columns.

+2

Nhưng chiều dài số nguyên của MySQL lên đến 11 - không phải 10, mà dường như là mặc định? Tương tự cho TINYINT mà đi lên đến 4 vv –

+11

Nó đi lên đến 11 cho các số nguyên đã ký. Đối với các số nguyên không dấu (và sau đó tôi có nghĩa là kiểu 'INT'), nó lên tới 10. – lowerends

+1

Làm cho cảm giác, cảm ơn, mặc dù nó là một sự xấu hổ mà bạn không thể xác định độ dài - nó có thể hữu ích trong một số kịch bản. –

0

Nghĩ rằng tôi sẽ tạo một bảng sao và dán dễ dàng cho các bảng tình huống chung.
Ký nếu bạn làm đòi hỏi giá trị âm và unsigned nếu bạn không.

 
| Type    | Eloquent (Schema Builder)     | Min  | Max | 
| ------------------- | ----------------------------------------- | ------- | ------ | 
| TINYINT (Signed) | $table->signedTinyInteger('foo')   | -128 | 127 | 
| TINYINT (Unsigned) | $table->unsignedTinyInteger('foo')  | 0  | 255 | 
| SMALLINT (Signed) | $table->signedSmallInteger('foo')   | -32768 | 32767 | 
| SMALLINT (Unsigned) | $table->unsignedSmallInteger('foo')  | 0  | 65535 | 

Đối với các loại Integer lớn hơn, xem: https://dev.mysql.com/doc/refman/5.5/en/integer-types.html

1

Tôi đoán rằng bạn muốn chỉ định một chiều dài từ 10 đến phù hợp với một id increment (khi khai báo các phím nước ngoài). Nếu vậy thì bạn phải sử dụng:

$table->unsignedInteger('some_id_reference'); 
Các vấn đề liên quan