Điều này hiệu quả với tôi (điều quan trọng là đặt chỉ mục cho cột tự động tăng)
Schema::table('table', function(Blueprint $t) { // Add the Auto-Increment column $t->increments("some_colum"); // auto increment needs to be an index (not necessarily primary) $t->index(['some_column']) // Remove the primary key $t->dropPrimary("some_column"); // Set the actual primary key $t->primary(array("id")); });Câu trả lời ban đầu có thể được nhìn thấy trên StackOverflow
Khi chúng tôi sử dụng chức năng tăng tự động của Laravel trong quá trình di chuyển, nó sẽ coi đó là khóa chính theo mặc định
Hoặc ngay cả khi chúng tôi muốn tạo trường khác làm khóa chính thay vì Nếu thì mysql không cho phép nhiều khóa chính
Để khắc phục vấn đề trên, tôi đã tìm thấy một số hack tìm mã di chuyển như bên dưới
Trong đoạn mã trên Đầu tiên, tôi đã tạo một trường unsignedInteger và bằng truy vấn Hàng, tôi đã chuyển đổi trường thành auto_increment và duy nhất trong quá trình di chuyển Laravel
Mã trên đã được thử nghiệm trong Laravel 8. X và hoạt động tốt
Ở đây chúng tôi giải thích cách tạo khóa chính trong laravel. di chuyển khóa chính của laravel. Tạo một cột chuỗi thành khóa chính
Khóa chính của bảng là cột duy nhất của bảng, chúng ta có thể tạo khóa chính cả kiểu int và string
Tạo một di chuyển mới
php artisan make:migration create_orders_tableThêm khóa chính tăng tự động
Theo mặc định, chúng tôi tạo id tên cột chính và cột tăng tự động của nó thuộc loại số nguyên lớn không dấu
Laravel 8 thêm một phương pháp hoàn toàn mới để giúp thay đổi giá trị bắt đầu tăng tự động dễ dàng và đây là thông báo chính thức được đưa ra trên Twitter
Lén cái này vào Laravel 8. x hôm nay… ảnh. Twitter. com/Bg24S7iX4j
– Taylor Otwell (@taylorotwell) Ngày 6 tháng 9 năm 2020
1public function up()
2{
3 Schema::create('posts', function (Blueprint $table) {
4 $table->id()->startingValue(1200);
5 ...
Luôn có thể thay đổi mức tăng tự động thông qua các nền tảng cơ sở dữ liệu khác nhau, nhưng bạn cần thực hiện điều đó thông qua một lệnh thô. Với việc bổ sung phương thức startingValue, điều này cho phép bạn đặt số đầu tiên mà phần tăng tự động sẽ bắt đầu theo cách trôi chảy của Laravel
Đối với hầu hết các ứng dụng, bạn có thể sẽ không cần điều này nhưng trong những tình huống mà bạn không muốn bản ghi bắt đầu từ một, thì đó là một tùy chọn hữu ích
Tôi hiện đang làm việc trên dự án Laravel 4 bao gồm một máy chủ chính và nhiều máy khách. Máy khách tạo dữ liệu và gửi dữ liệu này đến máy chủ chính. Để tránh xung đột, tôi đang sử dụng UUID v4 làm khóa chính
Tuy nhiên, khi dữ liệu được tạo trên máy chủ, tôi muốn chỉ định một số nguyên tăng tự động duy nhất để người dùng dễ dàng xác định dữ liệu hơn. Ví dụ. Thay vì nói về item 5a8e896d-3ab4-48d2-9d39-faeb5227f012, người dùng có thể nói về item #24567
Để giữ cho ứng dụng của tôi có thể quản lý được, tôi đang sử dụng di chuyển, quá trình di chuyển hiện tại của tôi cho bảng này trông như thế này
public function up() { Schema::table('items', function($table) { $table->create(); $table->string('id')->primary(); //'id' For the purpose of keeping the ORM working, this field stores the UUID. $table->integer('number', true); //The human readable item number, the second parameter is true for auto-increment $table->text('otherdata'); $table->timestamps(); }); }Vấn đề là Laravel tự động tạo khóa chính khi xác định tăng tự động và do đó quá trình di chuyển kết thúc không thành công vì có hai khóa chính
[Exception] SQLSTATE[42000]: Syntax error or access violation: 1068 Multiple primary key defined (SQL: alter table `items` add primary key items_id_primary(`id`)) (Bindings: array ())Có cách nào để có một bảng có khóa chính và trường tăng tự động riêng biệt bằng cách sử dụng di chuyển Laravel 4 không
không, nó cũng có công cụ sửa đổi từ laravel, laravel eloquent sửa đổi tất cả các số gia làm khóa chính. nó không kiểm tra xem có khóa chính nào được đặt bởi người dùng không. tôi nghĩ laravel cần khắc phục sự cố này