Làm cách nào để khai báo khóa ngoại trong Laravel?

Tôi đã cố gắng tạo hai bảng với bảng thứ hai có khóa ngoại tham chiếu đến bảng đầu tiên

bàn đầu tiên

increments['id'];
            $table->string['name'];
            $table->timestamps[];
        }];
}

bàn thứ hai

increments['id'];
            $table->foreign['product_id']->references['id']->on['products'];
            $table->string['price'];
            $table->timestamps[];
        }];
}

Có lỗi này khi nhìn vào mắt tôi.
______6

Sau khi mò mẫm đây đó trên internet. Có vẻ như việc gọi trực tiếp phương thức nước ngoài không tạo cột có tham chiếu, điều mà bộ não ngớ ngẩn của tôi đã nghĩ. Vì vậy, tôi đã viết lại bảng thành như thế này


public function up[]
    {
        Schema::create['product_prices', function[$table]{

            $table->increments['id'];
            $table->integer['product_id'];
            $table->foreign['product_id']->references['id']->on['products'];
            $table->string['price'];
            $table->timestamps[];
        }];
}

Bây giờ một lỗi khác nhìn thẳng vào mắt tôi.
______7

Sau vài phút mò mẫm, tôi nhận ra các cột tương ứng trong khóa ngoại và khóa được tham chiếu phải có kiểu dữ liệu giống nhau. Kích thước và dấu của các loại số nguyên phải giống nhau. phương thức gia số [] đặt một số nguyên không dấu với số gia tự động theo mặc định trong db mysql

Đây là một mẹo nhỏ dành cho các nhà phát triển Laravel có kinh nghiệm hơn. Các nhà phát triển Laravel đã làm việc với framework trong một thời gian dài có thể đã bỏ lỡ cải tiến di chuyển nhỏ nhưng tốt đẹp này

Trước đây, để đặt khóa foregin, trước tiên bạn phải thêm một unsignedBigInteger vào tên của cột, sau đó, thông thường ở cuối cuộc gọi lại, bạn sẽ sử dụng phương thức foreign[] kế hoạch chi tiết, chuyển tên cột cho nó, sau đó

1Schema::create['events', function [Blueprint $table] {

3 $table->unsignedBigInteger['user_id'];

4 $table->unsignedBigInteger['person_id'];

7 $table->string['repeat_every'];

8 $table->string['notify_days_before'];

11 $table->foreign['user_id']->references['id']->on['users']->onDelete['cascade'];

12 $table->foreign['person_id']->references['id']->on['people']->onDelete['cascade'];

Tuy nhiên, trong các phiên bản mới hơn của Laravel, có một cách tốt hơn để làm điều này

Thay vì unsignedBigInteger, chúng ta có thể làm

1Schema::create['events', function [Blueprint $table] {

3 $table->foreignId['user_id']->constrained[]->onDelete['cascade'];

4 $table->foreignId['person_id']->constrained[]->onDelete['cascade'];

7 $table->string['repeat_every'];

8 $table->string['notify_days_before'];

Bây giờ, phương thức

increments['id'];
            $table->foreign['product_id']->references['id']->on['products'];
            $table->string['price'];
            $table->timestamps[];
        }];
}
1 sẽ sử dụng các quy ước để xác định tên bảng và cột được tham chiếu, nhưng nếu tên bảng của bạn bằng cách nào đó không khớp, bạn có thể chuyển nó làm đối số

1Schema::create['events', function [Blueprint $table] {

3 $table->foreignId['user_id']->constrained['users']->onDelete['cascade'];

4 $table->foreignId['person_id']->constrained['people']->onDelete['cascade'];

7 $table->string['repeat_every'];

8 $table->string['notify_days_before'];

Đó là nó

Thông thường, tôi không hào hứng với đường cú pháp, nhưng điều này tốt hơn nhiều

Không chỉ vì nó ngắn hơn và biểu cảm hơn, mà còn vì nó giúp mã dễ xóa hơn - và mã dễ xóa luôn tốt hơn

Hướng dẫn này chỉ cho bạn cách thêm khóa ngoại trong quá trình di chuyển laravel. nếu bạn muốn xem ví dụ về di chuyển laravel thêm ràng buộc khóa ngoại thì bạn đã đến đúng nơi. tôi muốn cho bạn thấy bảng tạo bảng di chuyển laravel với khóa ngoại. bạn sẽ học cách tạo bảng khóa ngoại laravel. Vì vậy, hãy làm theo vài bước để tạo ví dụ về laravel migration tạo bảng với khóa ngoại

Tôi sẽ cung cấp cho bạn ví dụ rất đơn giản về cách tạo bảng có ràng buộc khóa ngoại bằng cách sử dụng di chuyển laravel. bạn có thể dễ dàng sử dụng ví dụ này với phiên bản laravel 6, laravel 7, laravel 8 và laravel 9

trong ví dụ này, chúng tôi sẽ tạo bảng "bài đăng" và "bình luận". trong bảng nhận xét, chúng tôi sẽ thêm hai ràng buộc khóa ngoại, một ràng buộc với bài đăng và một ràng buộc khác với bảng người dùng. Vì vậy, hãy tạo di chuyển đơn giản và hãy xem

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

Khóa ngoại . $table->integer['user_id']->unsigned[]; $table->foreign['user_id']->references['id . In this example, we are stating that the user_id column references the id column on the users table.

Làm cách nào để xác định khóa ngoại trong Laravel 9?

Trước tiên, bạn phải tạo chỉ mục cho trường user_id của mình. $table->index['user_id']; . $table->foreign['user_id']->references['id']->on['users']->onDelete['cascade']; If you want to do that with a new migration, you have to remove the index and foreign key ...

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

foreign[] – Chuyển tên trường mà bạn muốn ràng buộc khóa ngoại. .
Bây giờ, điều hướng đến thư mục cơ sở dữ liệu/di chuyển/ từ thư mục gốc của dự án
Tìm một tệp PHP kết thúc bằng create_countries_table và mở nó
Xác định cấu trúc bảng trong phương thức up[]

Chủ Đề