ECWorks Blog

ECWorks Blog

CakePHPを中心としたサイト開発情報をメインに公開。新しもの好きなので時々製品レポートなんかも。

【CakePHP辞典】Tips第3回:Model::read()

ModelのTipsが続いてしまいますが、今回はModel::read()についての注意事項です。

通常Modelでデータソースからのデータの読み出しはModel::find()/findBy()を用いるのが一般的だと思いますが、ほかの読み出し方法もいくつか存在しています。その中に今回取り上げます「Model::read()」がありますが、こちらは「プライマリIDを指定してレコード取得」を行うことができます。取得フィールドが指定できるため「find(‘first’, array(‘conditions’ => array(‘id’ =>$id), ‘fields’ => $fields));」に近いと思いますが、意味的にはfindById($id)のほうが近いかもしれません。

取り出し方、結果そのものについてはこれらはそれほど差がありませんが、ひとつだけread()には注意点があります。「Model::validationErrors」プロパティにはモデル保存等でバリデーションエラーが存在する場合にそのエラーメッセージが蓄えられるのですが、read()を実行すると問答無用で初期化します

「Model::validationErrors」プロパティを初期化するメソッドは、「Model::read()」のほか「Model::create()」「Model::saveAll()」の合計3メソッドです。おそらくread()はcreate()のように「モデルを初期化するためのメソッド」という位置づけなのでしょう。create()はコードで初期値を与えますが、read()は既存のレコードから初期値を与える、という感じですかね。なのでバリデーションエラーを保持して読み換えるような場合はread()は使うべきではない、ということになります。find()/findById()のほうがよいと思います。

個人的にはread()はほとんど使わないため「フーン」な仕様なのですが、bakeコマンドでコードを作り出している場合にはread()が含まれたコードを生成するそうなので、注意が必要です。@surface0さん情報ありがとうございました!

当メソッドの解説は「Pocket詳解 CakePHP辞典」の55ページに掲載されています。

ほかにも便利な機能が紹介されている「Pocket詳解 CakePHP辞典」を是非よろしくお願いします!

Pocket詳解 CakePHP辞典

Pocket詳解 CakePHP辞典 [書籍]

著者滝下 真玄

出版社秀和システム

出版日2010-09-27 (月)

商品カテゴリー単行本

ページ数672

ISBN4798027456

Supported by amazon Product Advertising API


Tagged as: ,

Comments are closed.