No hay razón para tener más de una tabla para "categorías", ya sea una categoría de nivel superior o una subcategoría. Son solo "categorías".
Entonces, tenga una sola tabla llamada "categorías", con un parent_id
campo:
// categories table
id
name
user_id
parent_id
Cuando desee extraer todas las categorías de nivel superior, simplemente ejecute su consulta en las categories
tabla con la condición de que parent_id
es nulo.
Luego, cuando desee obtener subcategorías, simplemente ejecute la consulta en las categories
tabla con una condición que parent_id = 123
(o lo que sea).
Esto no solo mantiene todo mucho más limpio, sino que también permite la expansión en caso de que desee continuar agregando categorías sub-sub-sub-sub... etc.
Otra opción es usar TreeBehavior de CakePHP .
Personalmente, prefiero usar la forma en que sugerí anteriormente, pero podría deberse a que no me he tomado el tiempo suficiente para comprender realmente este comportamiento.