プラグインで実装できるからコーディングしないんだけど

自身のテーブル内で親子関係(ツリー構造)を表現するときに、こうすると良いよというサンプルが
Managing Hierarchical Data in MySQL(dev.mysql.com)で紹介されています。
ここでツリー構造を取得するSQLが次のように紹介されてます。

SELECT node.name, (COUNT(parent.name) - 1) AS depth
FROM nested_category AS node,
nested_category AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
GROUP BY node.name
ORDER BY node.lft;

単純にこれと同じクエリをPropel(1.2系)で実装するどうなるんだろうと。。
ちなみにbetweenはそのまま指定できないので他の演算子で実装しています。

$c = new Criteria();
## SELECT
$c->clearSelectColumns();
$c->addSelectColumn('node.name');
$c->addAsColumn( 'depth', '(COUNT(parent.name) -1)');
## FROM
$c->addAlias('node', self::TABLE_NAME);
$c->addAlias('parent', self::TABLE_NAME);
## WHERE
$criterion = $c->getNewCriterion('node.lft' , 'node.lft >= parent.lft', Criteria::CUSTOM);
$criterion->addAnd($c->getNewCriterion('parent.lft' , 'node.lft <= parent.rgt', Criteria::CUSTOM));
$c->add($criterion);
## GROUP BY
$c->addGroupByColumn('node.name');
## ORDER BY
$c->addAscendingOrderByColumn('node.lft');

$rs = self::doSelectRS($c);
$rs->setFetchmode( ResultSet::FETCHMODE_ASSOC );

このCriteriaをみて直感で分かる人のほうが少ないような。。と正直感じますが。。
そして、上記を実行した結果発行されたSQLは以下のとおり。

SELECT node.name, (COUNT(parent.name) -1) AS depth 
FROM ec_category node, ec_category parent 
WHERE (node.lft >= parent.lft AND node.lft <= parent.rgt) 
GROUP BY node.name 
ORDER BY node.lft;

ちなみにgetNewCriterionでCriteria::CUSTOMを指定した場合は第1引数って飾りで意味ないのかなって思っていましたが、今回のように、addAliasでテーブルを追加するときに、追加したテーブルのエイリアス名を使用して第1引数を指定しないとFROM句にエイリアスが追加されませんでした。

というわけで、node.lftとparent.leftとエイリアス名を各々で指定しています。

ただ、symfonyではsfPropelActAsNestedSetBehaviorPluginというこれらのツリー構造を実装するためのプラグインが用意されてます。symfony使うならプラグインで追加実装するのが一番のようです。