symfony1.2 ORMのPropelに複数の条件式を設定

現時点では1.4系が最新でORMもDoctrineな時代だけど。
(そろそろ2.0系のデビューかしら!?)

仕事でPropelを使っていて、Doctrineとごちゃ混ぜになってきたのでメモメモ。
括弧付きの条件にしたい時などの場合、例えば以下の様なSQLをORMで生成させたい時

SELECT * FROM table WHERE table.a = 'hoge' and (table.b > 1 or table.b <= 2) and table.c IS NULL;

Propelで以下のようにモデルにコーディングすればいい。

# SF_ROOT_DIR/lib/model/TablePeer.php

$criteria  = new Criteria();

# カッコ内の条件
$criterion = $criteria->getNewCriterion(TablePeer::B, 1, Criteria::GREATER_THAN);
$criterion->addOr($criteria->getNewCriterion(TablePeer::B, 2, Criteria::LESS_EQUAL);

$criteria->add(TablePeer::A, 'hoge');
$criteria->add($criterion);
$criteria->add(Table::C, null, Criteria::ISNULL);

TablePeer::doSelect($criteria);

# SQLを確認してみる
var_dump($criteria->toString());

生成されたSQLをvar_dumpしてるけど、YAMLの設定によってはログファイルに書かれるのでそちらでも確認可能。
TablePeer::A なんかは self::A でも問題ないみたいね。
そう言えば、Propelはスタティックメソッドだな。