2012-03-10 26 views
0

私はcakephpを使って作業しており、いくつかのシンプルなモデルとリレーションシップを作成することができました。私は特にhasManyの関連付けを実装しようとしています。私の問題は子アイテムを更新しようとしていることに由来します。CakePHP編集ページでフィールドが更新されない

私の例では、私は 'Parent'と 'Child'モデルクラスがあると仮定します。私はビューに作成し、問題なくページを追加することができます。しかし、私は編集ページで同じ成功を収めているわけではありません。編集ページでは、親フィールドと子フィールドの両方を表示することができます。しかし、フォームを保存すると、子アイテムを更新するのではなく、既存のアイテムだけでなく、それらの行が追加されます。なぜこれが起こっているのか分かりません。どこかでパラメータが足りないのですか?

これは、編集ページ

echo $this->Form->create('Parent', array('action' => 'edit')); 
echo $this->Form->input('title'); 
echo $this->Form->input('body', array('rows' => '3')); 
echo $this->Form->input('id', array('type' => 'hidden')); 

$x = 0; 
foreach($this->request->data['Child'] as $child){ 
    print $this->Form->input("Child.$x.name"); 
    $x++; 
} 

ための私のコードであり、これはsaveAll前にこれを挿入してください、私のParentController

public function edit($id = null) { 
    $this->Parent->id = $id; 
    if ($this->request->is('get')) { 
     $this->request->data = $this->Parent->read(); 
     } else { 
      if ($this->Parent->saveAll($this->request->data)) { 
       $this->Session->setFlash('Your post has been updated.'); 
       $this->redirect(array('action' => 'index')); 
      } else { 
       $this->Session->setFlash('Unable to update'); 
      } 
     } 
} 
+0

フォームアクションが/コントローラ/編集/ IDだけではなく、/コントローラ/編集であることを確認するためにソースコードを見ていましたか? idのデフォルト値をnullと仮定しているので、それは起こると予想されます。 –

+0

誰かが$ this-> Parent-> idを$ idに設定することで、隠しフィールドとして$ this-> data ['Parent'] ['id']を持っていることを指摘する前に、これをオーバーライドします。 $ idがnullの場合、新しい行が挿入されます。 –

答えて

0

に編集機能である:私はときことを知っている

複数の関連データを保存する場合は、どのIDを使用するかを検証する必要があります。

unset($this->Parent->Child->validate['parent_id']);

資源:http://book.cakephp.org/1.3/view/1031/Saving-Your-Data

関連する問題