Propelで同一カラムに対して複数の条件文を使う書き方
知らなくて5分くらいハマったのでメモ。
生SQLだとこんなクエリです。
SELECT * FROM TEST WHERE created_at >= "2008-08-01" AND created_at <= "2008-08-31"
これをPropelで書き直すと、下のようなイメージでした。
<?php $c = new Criteria(); $c->add(TESTPeer::CREATED_AT, "2008-08-01", Criteria::GREATER_EQUAL); $c->add(TESTPeer::CREATED_AT, "2008-08-31", Criteria::LESS_EQUAL); return TESTPeer::doSelect($c);
しかし、これだと後から書いた条件("2008-08-31"の方)しか有効になっていませんでした。たぶん、addメソッドは条件を上書きする仕様なんだろうなと予想してソースでも読むかーと思ったけど、その前にGoogle先生に聞いたら同じ事をやっている人を発見。
こんな感じで書けば、Propelで同一カラムに複数条件が使えるそうです。
<?php $c = new Criteria(); $newcrit = $c->getNewCriterion(TESTPeer::CREATED_AT, "2008-08-01", Criteria::GREATER_EQUAL)->addAnd( $c->getNewCriterion(TESTPeer::CREATED_AT, "2008-08-31", Criteria::LESS_EQUAL); $c->add($newcrit); return TESTPeer::doSelect($c);
Propelメンドクセー。生SQL書いた方が早いと思ってしまった。。
公式のCode Snippetsにも書かれてました。
追記
コメントでtic-toc.infoさんが指摘されてるようにaddAnd()だけでも書けます。
こちらの方が短くて良いですね!
<?php $c = new Criteria(); $c->add(TESTPeer::CREATED_AT, ”2008-08-01”, Criteria::GREATER_EQUAL); $c->addAnd(TESTPeer::CREATED_AT, ”2008-08-31”, Criteria::LESS_EQUAL); return TESTPeer::doSelect($c);