トップレベルのカテゴリであろうとサブカテゴリであろうと、「カテゴリ」に複数のテーブルを設定する理由はありません。それらはすべて単なる「カテゴリ」です。
したがって、parent_id
を持つ「categories」という単一のテーブルがあります。 フィールド:
// categories table
id
name
user_id
parent_id
すべてのトップレベルのカテゴリを取得する場合は、categories
に対してクエリを実行するだけです。 parent_id
という条件のテーブル nullです。
次に、サブカテゴリを取得する場合は、categories
に対してクエリを実行するだけです。 parent_id = 123
という条件のテーブル (または何でも)。
これにより、すべてが非常にクリーンに保たれるだけでなく、サブサブサブサブカテゴリを追加し続けたい場合の拡張も可能になります...など
もう1つのオプションは、CakePHPのTreeBehavior を使用することです。 。
個人的には、上記で提案した方法を使用していますが、この動作を十分に理解するのに時間がかかっていないことが原因である可能性があります。