Nie ma powodu, aby mieć więcej niż jedną tabelę dla „kategorii”, niezależnie od tego, czy jest to kategoria najwyższego poziomu, czy podkategoria. Wszystkie to tylko „kategorie”.
Miej więc jedną tabelę o nazwie „categories” z parent_id
pole:
// categories table
id
name
user_id
parent_id
Jeśli chcesz pobrać wszystkie kategorie najwyższego poziomu, po prostu uruchom zapytanie względem categories
tabela z warunkiem, że parent_id
jest zerowe.
Następnie, jeśli chcesz pobrać podkategorie, po prostu uruchom zapytanie względem categories
tabela z warunkiem, że parent_id = 123
(lub cokolwiek).
Dzięki temu wszystko jest nie tylko czystsze, ale także pozwala na rozbudowę w przypadku, gdy chcesz kontynuować dodawanie podkategorii pod-pod-podkategorii... itd.
Inną opcją jest użycie CakePHP TreeBehavior .
Osobiście po prostu wolę używać sposobu, który zasugerowałem powyżej, ale może to być spowodowane tym, że nie poświęciłem czasu, aby naprawdę wystarczająco zrozumieć to zachowanie.