2012-04-04 9 views
1

これは2.xの私の最初のアプリですが、私はCakePHPにはまったく新しくありません。私は焼きコントローラ&ビューを使用しており、編集機能に問題があります。編集機能はUPDATEではなくINSERTです。CakePHP 2.1

public function edit($id = null) { 
     $this->User->id = $id; 
     if (!$this->User->exists()) { 
      throw new NotFoundException(__('Invalid user')); 
     } 
     if ($this->request->is('post') || $this->request->is('put')) { 
      if ($this->User->save($this->request->data)) { 
       $this->Session->setFlash(__('The user has been saved')); 
       $this->redirect(array('action' => 'index')); 
      } else { 
       $this->Session->setFlash(__('The user could not be saved. Please, try again.')); 
      } 
     } else { 
      $this->request->data = $this->User->read(null, $id); 
     } 
    } 

を、これは私が、私は間違いなく、私が知っている場合でも、無効なユーザーを持っていることを聞いているだけでは

if (!$this->User->exists()) { 
      throw new NotFoundException(__('Invalid user')); 
     } 

残っているときは:初心者のために

は、ここで焼成したものですユーザーが存在することを示します。

私はこのように変更した場合:

if (!$this->User->exists($id)) { 
        throw new NotFoundException(__('Invalid user')); 
       } 

正しい編集フォームが立ち上がると、正しいデータが移入されますが、[保存時にそれが更新するのではなく、INSERTしようとします。

これは通常、CakePHPには動作するIDはありませんが、フォームには隠れたIDフィールドがあり、保存する前に次のように入力することによって強制的に問題を引き起こしています。

$this->request->data['User']['id'] = $id; 

ここで何が起こっているのですか?

+1

=>あなたのコードは、100%のfoolproveに見えることを行う場合には、「私も、問題を強制しようとした」作品。私には正しく更新されるはずです... $ idをデバッグしましたか? POSTで何かチャンスがありますか?正しいURLに投稿するために、フォームに隠れた入力として "id"を残しておく必要があります(これはあなたの問題であるかもしれません)。 – mark

+0

あなたは正しいと思います。私はもっ​​と調査していないので気が気になりませんでしたが、私はIDパラメータのために何かを使って編集ページに行きましたが、それでもフォームに「正しく」入力しました(テーブルには1人のユーザーしかいません。私がURLにIDのために入力するものの)。私はここに何があるか把握しなければならない。 – Tspesh

+0

保存する前にあなたのデータをデバッグ()し、あなたの質問に投稿してください。 – Dave

答えて

0
public function edit($id = null) { 
     if (!$this->User->exists($id)) { 
      throw new NotFoundException(__('Invalid user')); 
     } 
     if ($this->request->is('post') || $this->request->is('put')) { 
      $user_data = $this->User->findById($id); 
      if ($this->User->save($this->request->data)) { 
       $this->Session->setFlash(__('The user has been saved'), 'flash'); 
       $this->redirect(array('action' => 'index')); 
      } else { 
       $this->Session->setFlash(__('The user could not be saved. Please, try again.'), 'flash'); 
      } 
     } else { 
      $options = array('conditions' => array('User.' . $this->User->primaryKey => $id)); 
      $this->request->data = $this->User->find('first', $options); 
     } 
     } 
+0

ここにいくつかのコードについて説明していますか? – Werner

0

私はその後、私はデータベースのフィールドIDが自動インクリメントしsettedていなかったことがわかっ ...ベーク、隠されたIDなどによって発生する同じ問題、コードを得ました。

私はAUTOINCREMENTと設定し、それは

関連する問題