modelまだまだ苦難

いろいろまとめたいんだが、時間とれん!簡単に。

一時的に入力チェックをはずしたい場合は

unset($this->validate['pass']);

、、一回のformのサブミットで、複数のテーブルにデータを入れる場合、おのおののモデルでvalidateチェックをさせ、かつそれをエラーメッセージとして表示させたい場合は

 echo $form->create('SubMember', array('action' => 'edit/'));
  echo $form->input('activity_status',array('options'=>Configure::read('activity_status'),'value'=>$user_list['SubMember']['activity_status']));
  echo $form->input('User.name',array('label'=>'名前','value'=>$user_list['User']['name']));
  echo $form->input('User.kana',array('value'=>$user_list['User']['kana']));  

こんな感じで、名前を明示的にModel.フィールド名で指定すると、validate時のエラーメッセージが出力される。
この場合、$form->createしているのはSubMemberなので、SubMemberのモデルのvalidateチェックはちゃんと出力されるんだけど、name とかkanaについてはUser.と指定することでエラーメッセージが出力されるようになる。メッセージがでないと例のごとくSQLは実行されないので大分てまどる…。validateはかかってるんだけど、メッセージだけがでないのでなんで?なんで更新されないんだ??とか大分わけわからん事になっていました。

それと。save()させるまえに、一度Model->validate();をして、実際validateが正しく動作してるかどうかを判断したい場合、必ずその手前で

Model->set($this->data);

をかかないと…ずーっとfalseですから、きをつけようね…お兄さんとの約束だよ…。とほほ;明示的にvalidateをさせる場合は必ずデータをセットだよ!これ、set()をコメントアウトしてvalidateの結果だけを出力させていたので、なんか意味不明に迷ってしまった。当然だけどset()を実行しないとずーっとvalidateの結果はfalseです。もういや…。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中