CakePHPでのSQL

まっちー

まっちー

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サイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。

Webサイト制作の実績・料金を見る

この記事のシェア数

プログラマのまっちーです。酒が大好きです。ある一定量のお酒を飲むと壊れたレディオモードに入り、同じことを繰り返す癖があります。宜しくお願いいたします。

このメンバーの記事をもっと読む
デザイン力×グローバルな開発体制でDXをトータル支援
お問い合わせ 会社概要DL