愛媛ITフェアに向けて、社内でオリジナルアプリを作ろうという話になった。開発チームでは、作成するのものの大枠が決定したので、とりあえずプロトタイプを作って、社内レビューして、よさそうだったら出展という流れにしようかなと思って、開発を開始した。
使用するフレームワークはCakePHP。これは勝手に俺が決めて、作っているだけだが、まあプロトタイプ作成だし、手段はどうだっていいということだ。RedMineのWiki上に要求仕様をまとめて、制作開始。
CakePHP1.2もstableが出たし、CakePHP徹底入門も結構前に買ってたので、CakePHP1.2で作ることにした。バージョンが1.1から1.2に変わったことで、便利になった部分も多いが、1.1を覚えてしまったせいで、結構弊害もあって、なかなか難しい。
CakePHP徹底入門 | |
イージーゲート
翔泳社 2008-08-29 おすすめ平均 |
この本だけでは、正直CakePHPの使い方をマスターできるとは到底思えないが、CakePHP1.2からスタートする人にとっては必須になるだろうなとは思う。個人的には、CakePHPガイドブックから入った人には、CakePHPポケットリファレンスのほうが便利に感じるだろう。
CakePHP ポケットリファレンス (Pocket Reference) | |
株式会社ブルーオーシャン 岡田 佳典
技術評論社 2008-06-18 おすすめ平均 |
さて、本題に入るが、CakePHP1.1のときと同じような感覚で、Model::findメソッドの条件指定に以下のように書いたら、動かなかった。
<?php // コントローラークラス内での記述 $conditions = array( 'name' => '= ' . $name, 'limitdate' => '> ' . date('Y-m-d') ); $modelInfo = $this->Model->find($conditions); // Modelは任意のModelクラス if (empty($modelInfo)) { // 追記:emptyを書いたら2重になった // 条件に合うものがなかった処理 } else { // 条件に合うものが見つかった処理 } ?>
動かなかったというよりは、条件に合うものがなかった処理が実行されてしまった。
確実に条件に合うものがあるのに。デバッグモードを2にしていたため、SQL文を見たところ、条件部分が明らかにおかしくなっていたので、ググってみたら、以下のサイトを見つけた。
CakePHP 1.2 RC1からfindの条件指定方法が変更となった
このページに書かれているが、CakePHP1.2RC1から、Model::findの条件指定方法が変更になり、条件は連想配列の値側ではなく、キー側に持たせるようになった。これらは書籍にはない情報だったので、非常に助かった。先ほどの条件式を新しい方式に書き直すと、以下のようになる。
<?php // コントローラークラス内での記述 $conditions = array( 'name =' => $name, // ココを修正 'limitdate >' => date('Y-m-d') // ココを修正 ); $modelInfo = $this->Model->find($conditions); // Modelは任意のModelクラス if (empty($modelInfo)) { // 追記:emptyを書いたら2重になった // 条件に合うものがなかった処理 } else { // 条件に合うものが見つかった処理 } ?>
これで、見事に動いてくれた。CakePHPの情報は本だけではなかなか難しい。一番参考になるのは、やっぱりCookbookかな~と思う。
追記:syntax-highlighterで、emptyを書いたら、2重に書かれてしまった…。plainでみたら、1つなんですけどね。syntax-highlighterのバグかな。