read() するとエラーがクリアされてしまう
主キーがあるときって、モデルの read() は便利ですよね?
でも注意が必要かもです。
データ更新の場合次のような構造になることが多いんですが、
public function edit($id = null) { if (!empty($this->data)) { $this->Model->save($this->data); } $this->Model->read(null, $id); // $this->Model->find('first', array('conditions'=>array($this->Model->primaryKey=>$id))); }
この場合に save() 時のバリデートでエラーがあった場合に
エラー内容をビューで表示しよう($form->error())と思ってもうまくいきません。
read() 時に $this->validationErrors = array(); でエラー情報がクリアされてしまうからです。
find() であればうまくいきます。指定が面倒になるんだけど。。。
データ取得系は find() に集約しているからそっち使えってことなのか?
ソースをみると $this->id を元にして取得する感じから set() で設定したデータを元にって場合なのか?
いや、$this->find() の使い方からみると find() 集約以前(V1.1?)の遺物な気がしてきた。。。
なので AppModel にこんなのがあるとちょっと幸せ。
引数の順序はこっちの方がいいと思うんだけど。$id は必須だし。。。
public function myread($id, $fields = array()) { $conditions = array( 'conditions' => array($this->primaryKey => $id), ); if (!empty($fields)) { $conditions['fields'] = $fields; } return $this->find('first', $conditions); }