cakephp之saveAll() 插入新行而不是更新

webabcd 阅读:44 2024-10-01 17:34:08 评论:0

我正在尝试使用 CakePHP SaveAll() 方法更新记录,但是,它添加了新行而不是更新它。

我的模型如下:A Store hasOne Map

class Store extends AppModel {   
    var $name = 'Store'; 
 
    var $hasOne = array( 
        'Map' => array(   
            'className' => 'Map', 
            'foreignKey' => 'store_id', 
            'dependent' => true, 
            'exclusive' => true 
        ) 
    ); 
} 

我的编辑表单有一个商店 ID(隐藏字段)告诉 CakePHP 只更新特定记录。

<?php echo $this->Form->input('Store.id'); ?> 
<?php echo $this->Form->input('Store.name', array('label' => 'Store name', 'required')); ?> 
<?php echo $this->Form->input('Map.latlng', array('label' => 'Map location', 'required')); ?> 

我在 Store Controller 中的编辑方法如下。

if ($this->Store->saveAll($this->data)) { 
    $this->Session->setFlash('Store has been updated.'); 
    $this->redirect(array('controller' => 'store', 'action' => 'admin_index')); 
} 

每当我编辑商店时,商店名称都会正常更新,但 CakePHP 会继续在 Map 表中插入新行。

我在这里遗漏了什么吗?谢谢

附加信息

我的debug($this->data)如下

Array 
( 
    [Store] => Array 
        ( 
            [id] => 52 
            [name] => Sena The Accessorizer 
        ) 
 
    [Map] => Array 
        ( 
            [latlng] => 3.1580681, 101.7126311 
        ) 
 
) 

请您参考如下方法:

正如@Dunhamzzz 所指出的,Map 没有 ID,因此 CakePHP 插入了一条新记录。

为了解决这个问题,我为 Map.id 创建了一个隐藏字段

<?php echo $this->Form->input('Map.id'); ?> 

这将告诉 CakePHP 更新该特定记录而不是插入新记录。


标签:PHP
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号