プログラミング cakephp 初心者です。初めて質問します
ユーザー情報登録を実装中です
サインアップ時にusersテーブルにaddした情報に加え、別のページでusersテーブルに情報を追加するのと同時にそれとは別のtermsテーブルに情報を追加しようとしています。
つまりusersテーブルへは更新で、termsテーブルへは新規追加という形になっています。
現状ではデータは追加できています。Userのバリデーションも効いてます。しかしながらTermのバリデーションが効きません。
コードは以下のとおりです。
public $uses=array('User','NameList','Term'); ...省略... public function person() { $user_id = $this->Auth->user('id'); $this->set('user_id',$user_id); //セッション確認 if(isset($user_id)) { if($this->request->is('post') || $this->request->is('put')) { //Userのバリデーション $this->User->set( $this->request->data ); $this->User->validate = $this->User->validate_person; //Termのバリデーション $this->Term->set( $this->request->data['Term'] ); $this->Term->validate = $this->Term->validate_person; if($this->User->validates() && $this->Term->validates() ) { //user_idを取得 $user_id = $this->Auth->user('id'); //usersのデータを更新 $this->User->id = $user_id; $this->User->save($this->request->data); //Termのデータを保存 $this->Term->create(); $this->Term->save($this->request->data); //保存した会計期間をUser.term_idにセット $term_id = $this->Term->find('first', array( 'conditions' => array('user_id' => $this->Auth->user('id')), 'recursive' => -1, 'fields' => 'id' )); $data = array('id' => $user_id, 'term_id' => $term_id['Term']['id']); $this->User->save($data); //sessionを更新 $user = $this->User->find('first', array('conditions' => array('id' => $this->Auth->user('id')), 'recursive' => -1)); $this->Session->write('Auth', $user); } else { $this->Session->setFlash('入力項目にエラーがあります','/Flash/failure_simple'); $errors['User'] = $this->User->validationErrors; $errors['Term'] = $this->Term->validationErrors; $this->set('errors',$errors); } } } else { //sessionにuser_idがなければlogin画面へ $this->redirect($this->Auth->logout()); } }
Termモデルを最初に呼んでいるのでそのままUserのバリデーションの記述と同じように書けば動くかと思ったのですが動きません。
saveAssociatedを試みましたが、usersテーブルに新しいidを追加してしまうので、idにかぶせて更新したい意図なのでこれは違うと判断しています。
ちなみにTerm Modelのバリデーションコードは以下のとおりです。
public
1 'account_beggining' => array( 2 'rule' => 'notBlank', 3 'message' => '入力が必須です' 4 ), 5 'account_end' => array( 6 'rule' => 'notBlank', 7 'message' => '入力が必須です' 8 ), 9 ); 10コード
かなり困っています。どなたかお助けください。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/01/20 04:02