CakePHP:hasOne相关表在更新时保存多个条目

时间:2010-11-18 11:00:24

标签: cakephp model save

完全不熟悉蛋糕。

我将此表命名为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 ) );
 }
}

这很好,并向Content添加一个新条目,向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 ) );
}

我确定这块中的某些逻辑错误会导致这种情况发生。任何人都可以告诉我哪里出错了吗?

谢谢, 米^ E

1 个答案:

答案 0 :(得分:2)

对我而言,数据数组中缺少$ this-> data ['ContentMeta'] ['id']。因为这个字段是空的,蛋糕会尝试创建一个新行。

因此,在您的表单中为ContentMeta添加隐藏的id字段。

我认为改进代码的另一件事是使用

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

这样您就可以立即保存数据,而不是每个模型的2次save()调用。查看the cookboook中的手册(并在文本中搜索saveAll)。