Không có lý do gì để có nhiều hơn một bảng cho "danh mục", cho dù đó là danh mục cấp cao nhất hay danh mục phụ. Tất cả chúng chỉ là "danh mục".
Vì vậy, có một bảng duy nhất được gọi là "danh mục", với parent_id
lĩnh vực:
// categories table
id
name
user_id
parent_id
Khi bạn muốn kéo tất cả các danh mục cấp cao nhất, chỉ cần chạy truy vấn của bạn đối với các danh mục categories
bảng với điều kiện parent_id
là null.
Sau đó, khi bạn muốn kéo các danh mục phụ, chỉ cần chạy truy vấn đối với categories
bảng với điều kiện parent_id = 123
(hoặc bất cứ điều gì).
Điều này không chỉ giúp mọi thứ gọn gàng hơn rất nhiều, mà còn cho phép mở rộng trong trường hợp bạn muốn tiếp tục thêm các danh mục phụ phụ phụ ... vv.
Một tùy chọn khác là sử dụng TreeBehavior của CakePHP .
Cá nhân tôi chỉ thích sử dụng cách tôi đã đề xuất ở trên, nhưng có thể chỉ là do tôi chưa dành thời gian để thực sự hiểu đủ về hành vi này.