>>180
ありがとうございます。
今回例に出したのは2階層なんですが、実は4階層のケースでどうしようか悩んでいるのです・・・。

ちなみにお教え頂いた
「特定のモデルを中心に、hasManyとbelongsToを使って上下1階層(合計2階層)を取得する」
方法は成功しました(SQLは2文、条件指定も可)。2階層までならこの方法でいけますね。

今回のような2階層以上のデータの芋づる取得はそんなに多いケースではないので、
とりあえずMySQL上に多段JOINしたViewを定義して、そのView用のmodelを使用しようと思います。