CakePHPを使っていると、自分で直接SQL文を書く機会が少ない。っていうか、ほとんどない。
でもそれに慣れていると、たま~にどう書いたらいいのか分からなくなることがある。今回はそんな話。
DBにdateというカラム名でDATE型のデータが入っているとして、そこから今月のデータだけを取りたいような場合があるとする。
SQL文だとこんな感じになる。テーブル名はcalendars(仮)。
$month = date('m');
SELECT * FROM calendars WHERE MONTH(date) = $month;
date(‘m’)で現在の月(これを書いている今なら7月)を取得し、DBから7月のデータを抽出している。
これをCake的に書くにはどうすればいいのか最初分からなくて、ちょびっと困った。
$month = date('m');
$param = array('conditions' => array('date' => $month));
$this->Calendar->find('all', $param);
通常、CakePHPで条件を指定してSELECTするにはこんな書き方になるけど、これだと今月のデータを取ってきてはくれない。SQL的には下のようになってしまう。
SELECT * FROM calendars WHERE date = 07
dateフィールドに07なんていうデータはないので、これだとデータが一件も抽出されないで終わってしまう。
$month = date('m');
$param = array('conditions' => array("MONTH(date) = $month"));
$this->Calendar->find('all', $param);
こう書けばOK。ちゃんと今月のデータだけを取ってきてくれる。
配列だからarrayの中身は常に($key => $val)っていう書き方なんだって思いこんでると、こういうささいなところになかなか気づかなかったりするものでして…もっと気をつけたいもんです。
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。