3

我正在尝试使用以下命令更新一行,但 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 的最新版本。

我做错了什么?idinWHERE子句怎么可能6

编辑:它使用 Bake 生成的代码产生相同的结果。也许模型或数据库有问题?

编辑 2:我正在记录所有查询,在尝试更新之前,CakePHP 执行了一些操作SELECT count(*),它使用WHERE id = 6.

编辑 3:插入、删除和读取工作正常。


最后更新:问题解决

我不确定发生了什么,但我认为我解决了问题。

首先,更新不是使用 Bake 生成的代码的工作事件。

其次,只有Administrators的更新不起作用,其他的都可以。

第三,我认为问题来自表中的一列,administrators它也被称为administrators,它是一个TINYINT(1). 我将列名更改为administrators_area,也更改了一些代码,一切正常。

我认为本专栏造成了一些冲突,因此,UPDATE 不起作用。在尝试此操作之前,我将表名更改为users保持列不变administrators并且也可以正常工作。

如果问题不是表名和同名表列冲突,那我改名后问题解决了,真是太巧了。

4

2 回答 2

1

试试这个:

$this->request->data['Administrator']['id'] = $id; // <-- Line changed
$this->Administrator->save($this->request->data);
于 2012-12-04T13:23:52.283 回答
0

您是从表单构建此提交吗?您在视图上的表单中有什么?我的第一个猜测是你忽略了包含隐藏的 id 输入,它告诉 CakePHP 我们正在更新什么模型对象:

echo $this->Form->input('id',array('type' => 'hidden'));

如果你调用这些函数,你会收到什么样的数据?

debug($this->request->data);
debug($this->Administrator);

如果它不是表单本身的问题,我会怀疑只是因为它们 ID=1 应该只来自一些残留数据或未设置的模型。

于 2012-12-04T14:05:00.433 回答