2010-11-18 9 views
0

Cakeは全く新しいものです。CakePHP:更新時に複数のエントリを保存するhasOne関連のテーブル

私はこのテーブルにContentという名前を付け、ContentMetaという名前のテーブルをcontent_idで関連付けました。 Contentの各エントリには、対応するContentMetaがあります。

私は新しいコンテンツを追加すると、これは私がContentMetaに新しいエントリを追加するために使用しているコードです:

if(!empty($this->data)) { 

// Save Content 
$this->Content->create(); 
$content = $this->Content->save($this->data); 
// Save Meta 
if(!empty($content)) { 
    $this->data['ContentMeta']['content_id'] = $this->Content->id; 
    $this->Content->ContentMeta->save($this->data); 
    $this->Session->setFlash('Content has been saved.'); 
    $this->redirect(array('action' => 'edit', $this->Content->id)); 
} 
} 

これは正常に動作し、コンテンツとContentMetaに一から一新しいエントリを追加します。

データの更新(編集モード)については、少し問題があります。 Contentのエントリは問題なく更新されていますが、ContentMetaテーブルでは、1回の更新ごとに新しいエントリが作成されます。ここで

は、更新のためのコードです:

$this->Content->id = $id; 
// Update Content 
$content = $this->Content->save($this->data); 
// Update Meta 
if(!empty($content)) { 
    //Debugger::dump(print_r($this->data,true)); 
    $this->data['ContentMeta']['content_id'] = $this->Content->id; 
    $this->Content->ContentMeta->save($this->data); 
    $this->Session->setFlash('Content has been updated.'); 
    $this->redirect(array('action' => 'edit', $this->Content->id)); 
} 

私はそれがこの現象が発生する原因となっている。このブロックでは、いくつかの論理的な誤りだと確信しています。誰か私に間違っているアイディアを教えてもらえますか?

おかげで、 メートル^ E私にとって

答えて

2

それはあなたのデータ配列に[ 'ContentMeta'] [ 'ID']の$ this - >データが欠落しています。このフィールドが空であるため、ケーキは新しい行を作成しようとします。

あなたのフォームにContentMetaの隠しIDフィールドを追加します。私はあなたのコードを改善すると思い

もう一つは、あなたが()保存した後の代わりに、2であなたのデータを保存し、各モデルを求めます

$this->Content->saveAll($this->data); 

この方法を使用することです。 the cookboookのマニュアルをチェックしてください(そして、テキスト内のsaveAllを検索してください)。

+0

パーフェクト。それは仕事とsaveAllがコードを大きな時間を削減するのを助けました。以前はsaveAllを見てきましたが、手動で個々のステップを試してみるまでは使用しないようにしていました。ありがとうNik :) –

+0

すべてのsaveAllはsave()を数回(well __save())呼び出しますが、コードをクリーンアップします – dogmatic69

関連する問題