Není důvod mít více než jednu tabulku pro „kategorie“, ať už jde o kategorii nejvyšší úrovně nebo podkategorii. Všechno jsou to jen "kategorie".
Mějte tedy jednu tabulku nazvanou "kategorie" s parent_id
pole:
// categories table
id
name
user_id
parent_id
Pokud chcete získat všechny kategorie nejvyšší úrovně, stačí spustit dotaz proti categories
tabulka s podmínkou parent_id
je null.
Když pak budete chtít vytáhnout podkategorie, stačí spustit dotaz proti categories
tabulka s podmínkou, že parent_id = 123
(nebo cokoli jiného).
Nejen, že díky tomu bude vše mnohem čistší, ale také to umožňuje rozšíření v případě, že chcete pokračovat v přidávání pod-pod-pod-podkategorií...atd.
Další možností je použít CakePHP's TreeBehavior .
Osobně raději používám způsob, který jsem navrhl výše, ale může to být tím, že jsem si nenašel čas, abych tomuto chování dostatečně porozuměl.