CakePHPのBETWEEN

            <div class="section">

modelファイルのお話。

SELECT *
FROM hoges
WHERE created BETWEEN '2010-03-01 00:00:00' AND '2010-03-31 23:59:59';

みたいなSQLCakePHPのfindメソッドを利用して発行したいときに、

BETWEENの指定で引っかかったのでメモ。

調べたところ、そもそもBETWEEN句が利用できない仕様っぽいので、範囲指定でやろうと思い下記のプログラムを書いた。

$cond = array(
   'Hoge.created' => '>=' . date('Y-m-01 00:00:00'),
   'Hoge.created' => '<=' . date('Y-m-t 23:59:59'),
);
$r = $this->Hoge->find('all', array('conditions' => $cond));

これだとうまくいかない。

SELECT *
FROM hoges
WHERE created <= '2010-03-31 23:59:59';

なぜかわからないが、同一フィールドに対する条件を複数書くと、最後に書いたものだけが生きるみたいです。

これは、フィールド名の後ろに半角スペースを入れるだけで回避できる。

$cond = array(
   'Hoge.created' => '>=' . date('Y-m-01 00:00:00'),
   'Hoge.created ' => '<=' . date('Y-m-t 23:59:59'),
);
$r = $this->Hoge->find('all', array('conditions' => $cond))

なんか気持ち悪いね。。。