我有一个编辑表单,我想更新一些模型。问题是我的主要模型,单位,属于位置(因为一个位置可以有多个单位)。 cakephp手册描述了当您的相关模型数据属于您的主模型时如何保存所有,而不是如何反向工作。我在下面使用的代码显然不会更新Location.address。
来自edit.ctp的:
<?php
echo $this->Form->create('Unit', array('url'=>array('action' =>'edit'));
echo $this->Form->input('unitnum', array('label' => 'Unit\'s Name/Number'));
echo $this->Form->input('Location.0.address');
echo $this->Form->end('Update Property');?>
这是我的控制器代码:
function edit($id) {
$this->Unit->id = $id;
if (empty($this->data)) {
$this->data = $this->Unit->read();
} else {
if ($this->Unit->saveAll($this->data)) {
$this->Session->setFlash('Your property has been updated.');
}
}
}
注意:我也尝试使用echo $ this-&gt; Form-&gt; input('Location.address');虽然它为我预先填充了我的字段,但如果我更改它仍然不会更新位置地址。
更新 我发现当我提交表单时,蛋糕而不是更新位置地址,添加一个包含所有新信息的新位置!
第二次更新 我还发现,虽然cake会保存RELATED模型数据的新记录(主模型属于To),但它不会更新Unit(主模型)信息。
答案 0 :(得分:0)
您需要传递位置ID,否则它会认为它是一个新地址。
通常,这样做的方法是在下拉列表中显示各个位置(ID /名称),以便您选择要添加单位的位置。如果您已经知道该单元,那么您应该将Location.id包含为隐藏字段,然后仅显示location.address,而不是表单的一部分。