CakePHP:hasOne 相关表在更新时保存多个条目
Posted
技术标签:
【中文标题】CakePHP:hasOne 相关表在更新时保存多个条目【英文标题】:CakePHP: hasOne related table saving multiple entries upon updates 【发布时间】:2010-11-18 11:00:23 【问题描述】:对 Cake 完全陌生。
我有一个名为 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 添加一个新条目。
在更新数据(编辑模式)时,我遇到了一个小问题。 Content 的条目正在顺利更新,但在 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 ) );
我确定是这个块中的一些逻辑错误导致了这种情况的发生。谁能告诉我哪里出错了?
谢谢, m^e
【问题讨论】:
【参考方案1】:对我来说,您的数据数组中缺少 $this->data['ContentMeta']['id'] 。由于该字段为空,因此蛋糕尝试创建新行。
所以在你的表单中为 ContentMeta 添加一个隐藏的 id 字段。
我认为可以改进您的代码的另一件事是使用
$this->Content->saveAll($this->data);
这样您将一次保存数据,而不是为每个模型调用 2 次 save()。查看the cookboook 中的手册(并在文本中搜索 saveAll)。
【讨论】:
完美。这完成了工作,并且 saveAll 帮助大大减少了代码。我之前确实遇到了 saveAll ,但在我手动尝试了各个步骤之前一直避免使用它。谢谢尼克:) 所有 saveAll 所做的只是调用 save() 几次(好吧 __save()),但它确实清理了代码以上是关于CakePHP:hasOne 相关表在更新时保存多个条目的主要内容,如果未能解决你的问题,请参考以下文章