CakePHP在WHERE子句中放置`id` ='1'

时间:2012-12-04 13:20:02

标签: php mysql cakephp

我正在尝试使用以下命令更新行,但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并且也正常工作。

如果问题不是表名与具有相同名称的表列之间的冲突,那么在我更改名称后问题就解决了,这是一个很大的巧合。

2 个答案:

答案 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应该只来自某些残留数据或未设置的模型。