Няма причина да имате повече от една таблица за "категории", независимо дали е категория от най-високо ниво или подкатегория. Всички те са просто "категории".
Така че, имайте една таблица, наречена "categories", с parent_id
поле:
// categories table
id
name
user_id
parent_id
Когато искате да изтеглите всички категории от най-високо ниво, просто изпълнете заявката си срещу categories
таблица с условие, че parent_id
е нула.
След това, когато искате да изтеглите подкатегории, просто стартирайте заявката срещу categories
таблица с условие, че parent_id = 123
(или каквото и да е).
Това не само поддържа всичко много по-чисто, но също така позволява разширяване, в случай че искате да продължите да добавяте под-под-под-под-категории... и т.н.
Друга възможност е да използвате CakePHP TreeBehavior .
Аз лично предпочитам да използвам начина, който предложих по-горе, но може би просто защото не съм отделил достатъчно време, за да разбера наистина това поведение.