Não há motivo para ter mais de uma tabela para "categorias", seja uma categoria de nível superior ou uma subcategoria. Eles são apenas "categorias".
Portanto, tenha uma única tabela chamada "categories", com um
parent_id
campo:// categories table
id
name
user_id
parent_id
Quando você quiser extrair todas as categorias de nível superior, basta executar sua consulta nas
categories
tabela com uma condição que parent_id
é nulo. Então, quando você quiser extrair subcategorias, basta executar a consulta nas
categories
tabela com uma condição que parent_id = 123
(como queiras). Isso não apenas mantém tudo muito mais limpo, mas também permite a expansão caso você queira continuar adicionando sub-sub-sub-sub categorias... etc.
Outra opção é usar o TreeBehavior do CakePHP .
Pessoalmente, prefiro usar a maneira que sugeri acima, mas pode ser porque não tive tempo para realmente entender esse comportamento o suficiente.