2010-11-18 54 views
0

Cake完全不熟悉。CakePHP:hasOne相關表在更新時保存多個條目

我有這個名爲內容的表和另一個名爲ContentMeta(通過content_id相關)。內容中的每個條目都有相應的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。

當談到更新數據(編輯模式)時,我遇到了一個小問題。內容條目的更新順利完成,但是在ContentMeta表中,每次更新都會創建一個新條目。

下面是更新的代碼:

$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)); 
} 

我敢肯定,這是在這個塊中的一些邏輯上的錯誤是導致這種情況發生。任何人都可以給我一個想法,我錯了嗎?

感謝, 平方公尺Ë

回答

2

對於我來說,缺少$這個 - >數據[「ContentMeta」] [「身份證」]數據陣列英寸而且由於這個領域是空的,蛋糕試圖創造一個新的行。

因此,在您的表單中爲ContentMeta添加一個隱藏的ID字段。

,我認爲會改善你的代碼的另一件事是使用

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

這樣你就立刻而不是2保存您的數據保存()調用每個模型。檢查手冊the cookboook(並在文本中搜索saveAll)。

+0

完美。這樣做的工作和saveAll幫助減少了大量的代碼。我早些時候遇到過saveAll,但是直到我手動對各個步驟進行了試驗之後,才避免使用它。謝謝尼克:) – 2010-11-19 02:35:52

+0

所有saveAll不會調用save()幾次(以及__save()),但它清理代碼 – dogmatic69 2010-11-21 23:46:38

相關問題