【问题标题】:How to edit models when main model belongsTo related model?当主模型属于相关模型时如何编辑模型?
【发布时间】:2012-08-25 04:26:35
【问题描述】:

我有一个编辑表单,我想在其中更新一些模型。问题是我的主要模型 Units 属于 Location(因为一个 Location 可以有很多 Units)。 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->Form->input('Location.address');虽然它漂亮地为我预先填充了我的字段,但如果我更改它,它仍然不会更新位置地址。

更新 我发现,当我提交表单时,蛋糕不是更新位置地址,而是添加一个包含所有新信息的新位置!

第二次更新 另外我还发现,虽然 cake 会为 RELATED 模型数据(主模型属于)保存一条新记录,但它不会更新单元(主模型)信息。

【问题讨论】:

    标签: cakephp-2.0 cakephp-model


    【解决方案1】:

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

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

    【讨论】:

    • 经过我的一番挣扎后,我偶然发现了这一点。每次我觉得我开始掌握蛋糕的时候,我都会做一些事,回想起来让我觉得自己像个白痴,因为没有早点看到它。再次感谢您的帮助!
    • 这个想法是你继续前进。我们都会脑抽筋……一直。有人能从中汲取灵感是件好事。编码愉快!
    猜你喜欢
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    相关资源
    最近更新 更多