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 更新该特定记录而不是插入新记录。
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。