当主模型属于相关模型时如何编辑模型?

时间:2012-02-23 17:22:20

标签: cakephp-2.0 cakephp-appmodel

我有一个编辑表单,我想更新一些模型。问题是我的主要模型,单位,属于位置(因为一个位置可以有多个单位)。 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(主模型)信息。

1 个答案:

答案 0 :(得分:0)

您需要传递位置ID,否则它会认为它是一个新地址。

通常,这样做的方法是在下拉列表中显示各个位置(ID /名称),以便您选择要添加单位的位置。如果您已经知道该单元,那么您应该将Location.id包含为隐藏字段,然后仅显示location.address,而不是表单的一部分。