ツリー構造をしたデータをオブジェクトとしてうまく扱う方法ってあるの?

つまり、$model->findTree('id = a1') とかやったら、
- a1
 +- b1
   +- c1
   +- c2
 +- b2

こんな感じでツリーのデータとして返してくれる感じ。

参考までにほかのO/Rマッパーの話でもいいけど。

とここでふと思ったけど、自分のモデルに対してアソシエーション設定すればうまく行くのか?