我正在尝试使用以下命令更新行,但CakePHP始终在'1'
子句中添加WHERE
。
# the PHP command
$this->Administrator->id = $id; # id = 6, it wasn't changed
$this->Administrator->save($this->request->data);
-- simplified version of the generated SQL
UPDATE `someTable` SET `someField` = 'value', `id` = '6' WHERE `id` = '1'
有趣的是id
在更新部分中生成的SQL中是正确的,但在WHERE
子句中没有,是的,id
列是主要的密钥。表。我正在使用最新版本的CakePHP。
我做错了什么? id
子句中的WHERE
如何6
?
编辑:它与Bake生成的代码产生相同的结果。也许模型或数据库中存在问题?
编辑2:我正在记录所有查询,在尝试更新之前,CakePHP会执行一些SELECT count(*)
并使用WHERE id = 6
。
编辑3:插入,删除和阅读工作正常。
我不确定发生了什么,但我认为我解决了这个问题。
首先,更新不是使用Bake生成的代码的工作事件。
其次,只有管理员的更新不起作用,所有其他人都没问题。
第三,我认为问题来自administrators
表中的一个列,也称为administrators
,它是一个TINYINT(1)
。我将列名更改为administrators_area
,更改了一些代码并且都运行了。
我认为此专栏会产生一些冲突,因此UPDATE无效。在尝试此操作之前,我将表名更改为users
,使列保持为administrators
并且也正常工作。
如果问题不是表名与具有相同名称的表列之间的冲突,那么在我更改名称后问题就解决了,这是一个很大的巧合。
答案 0 :(得分:1)
请改为尝试:
$this->request->data['Administrator']['id'] = $id; // <-- Line changed
$this->Administrator->save($this->request->data);
答案 1 :(得分:0)
您是否正在从表单构建此提交内容?您在视图中的表单中有什么?我的第一个猜测是你忽略了包含id的隐藏输入,告诉CakePHP我们正在更新什么Model对象:
echo $this->Form->input('id',array('type' => 'hidden'));
如果您调用这些功能,您会收到哪种数据?
debug($this->request->data);
debug($this->Administrator);
如果它不是表单本身的问题,我会怀疑它只是因为它们ID = 1应该只来自某些残留数据或未设置的模型。