Tự động tăng khóa chính di chuyển của Laravel

Đ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

...
use Illuminate\Support\Facades\DB; //Don't forget to add
....

public function up()
  {
    Schema::create('users', function (Blueprint $table) {
      $table->unsignedInteger('id');
      $table->string('userID', 32);
      $table->timestamps();
      $table->primary('userID');
    });

    DB::statement("ALTER TABLE users MODIFY COLUMN id INT auto_increment unique");
  }

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_table

Thê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

Khóa chính có tự động tăng không?

Tự động tăng cho phép một số duy nhất được tạo tự động khi một bản ghi mới được chèn vào bảng. Thường thì đây là trường khóa chính mà chúng tôi muốn được tạo tự động mỗi khi một bản ghi mới được chèn vào

Làm cách nào để nhận id tăng tự động trong Laravel?

$lastValueCollection = Đăng. where('formId', $request->inputFormId)->orderBy('Term', 'desc')->first(); . , 'Client_ID'=>$form_counter); . bảng ('nhà tuyển dụng') -> chèn ($

Làm cách nào để di chuyển trong Laravel mà không mất dữ liệu?

Đặt chi tiết cột của bạn ở đó, chạy di chuyển bằng cách sử dụng di chuyển thủ công php và đó là tất cả. Bạn sẽ có cột mới này trong bảng người dùng của mình mà không làm mất dữ liệu đã lưu trữ trước đó

Làm cách nào để đặt giá trị mặc định cho Auto_increment trong MySQL?

ALTER TABLE tableName AUTO_INCREMENT=specificValue; Ở đây, tableName đề cập đến tên của bảng mà cột 'AUTO_INCREMENT' cần được đặt. 'Giá trị cụ thể' đề cập đến một số nguyên mà từ đó các giá trị 'AUTO_INCREMENT' được người dùng chỉ định để bắt đầu.