完全不熟悉蛋糕。
我将此表命名为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
答案 0 :(得分:2)
对我而言,数据数组中缺少$ this-> data ['ContentMeta'] ['id']。因为这个字段是空的,蛋糕会尝试创建一个新行。
因此,在您的表单中为ContentMeta添加隐藏的id字段。
我认为改进代码的另一件事是使用
$this->Content->saveAll($this->data);
这样您就可以立即保存数据,而不是每个模型的2次save()调用。查看the cookboook中的手册(并在文本中搜索saveAll)。