Cakephp1.2でModel::findの条件指定変更だったとは!

愛媛ITフェアに向けて、社内でオリジナルアプリを作ろうという話になった。開発チームでは、作成するのものの大枠が決定したので、とりあえずプロトタイプを作って、社内レビューして、よさそうだったら出展という流れにしようかなと思って、開発を開始した。

使用するフレームワークはCakePHP。これは勝手に俺が決めて、作っているだけだが、まあプロトタイプ作成だし、手段はどうだっていいということだ。RedMineのWiki上に要求仕様をまとめて、制作開始。

CakePHP1.2もstableが出たし、CakePHP徹底入門も結構前に買ってたので、CakePHP1.2で作ることにした。バージョンが1.1から1.2に変わったことで、便利になった部分も多いが、1.1を覚えてしまったせいで、結構弊害もあって、なかなか難しい。

CakePHP徹底入門
CakePHP徹底入門 イージーゲート

翔泳社 2008-08-29
売り上げランキング : 120410

おすすめ平均 star
starこれから始める人にはお勧め
starがっかり

Amazonで詳しく見る by G-Tools

この本だけでは、正直CakePHPの使い方をマスターできるとは到底思えないが、CakePHP1.2からスタートする人にとっては必須になるだろうなとは思う。個人的には、CakePHPガイドブックから入った人には、CakePHPポケットリファレンスのほうが便利に感じるだろう。

CakePHP ポケットリファレンス (Pocket Reference)
CakePHP ポケットリファレンス (Pocket Reference) 株式会社ブルーオーシャン 岡田 佳典

技術評論社 2008-06-18
売り上げランキング : 16855

おすすめ平均 star
starこれだけで作れそうです。
star現状のCakePHPリファレンスでは最良
starサンプルコードがもう少し丁寧であれば5つ星

Amazonで詳しく見る by G-Tools

さて、本題に入るが、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のバグかな。


カテゴリー CakePHP, PHP | タグ | パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です