Foreign key trong mysql

Mn giúp mình với - Mình có tạo 2 bảng:
Products (1) và ProductCategories (2). Bảng (1) có field category là foreign key tham chiếu đến field id của bảng (2). Mình tạo foreign key qua migrate của laravel.
Vấn đề là đã đầy đủ mã để thêm foreign key và khi chạy migration để tạo các bảng và foreign key đều thành công không báo lỗi nhưng khi vào navicat để xem design của bảng (1) thì nó lại không có foreign key. Thử tạo thủ công qua navicat cũng ko đc. Foreign key mới tạo sẽ tự động nhảy sang Indexes như hình dưới. Việc xóa các field trong bảng (2) cũng diễn ra như bình thường khi không set foreign key.

ĐÂY LÀ CODE CỦA MÌNH - MONG MN GIÚP ĐỠ:

Bạn có thể up code bạn đã tạo lên đây để mọi người xem giúp nó có bị vướng ở đâu không nhé.

3 Likes

mình đã update lại bài viết. Mong nhận giúp đỡ từ bạn và mn!

5 Likes

hi bạn tránh up ảnh mà tìm hiểu thêm nên up code thế nào trên web nha.

Theo mình hiểu thì nguyên tắc của việc tạo foreign keys trong sql là nó phải là 1 primary key(but not unique) trong table reference trước đã. Trong phần code của bạn, mình không thấy có hiển thị phần đặt id là primary key trong table product_categories
Thường thì cấu trúc như vd sau:
Trên table users:

Schema::create('users', function (Blueprint $table) {
    $table->primary('id');
});

Trên table post

Schema::table('posts', function (Blueprint $table) {
    $table->unsignedBiginteger('user_id');
    $table->foreign('user_id')->references('id')->on('users');
});

Bạn đặt primary key cho id của product_categories rồi run lại xem sao nhé.

2 Likes

cảm ơn bạn đã giành thời gian ra để giúp đỡ mình. mình xin tiếp thu đóng góp của bạn về việc up code lên website. Tại mình thấy mấy dòng code trên đều rất basic trong laravel không nặng nề về logic nên mới làm như vậy :grinning:
Và vấn đề về foreign key đã được giải quyết. Việc không tạo được foreign key bởi trc đó mình dùng xampp khi tạo table mặc định engine là InnoDB nên việc tạo foreign key diễn ra bình thường. Gần đây mình chuyển qua wamp thì table engine lại là myISAM nên mới không hỗ trợ foreign key. Thân! :heartpulse:

3 Likes

Oh không có gì, thật vui vì bạn đã giải quyết được vấn đề :grinning:, mình cũng hiểu thêm được 1 số cái trong vấn để của bạn. Tks! :smile:

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?