我正在尝试更新与其线程ID相关的记录数。我的 id_thread 字段不是主键,这是一个问题。但据我所知,cakephp仅支持更新与主要身份相关的内容。
使用过的代码
$this->contact->id_thread = $id;
$this->Contact->saveField('is_read','y');
但这不适合我。有什么想法吗?
我的数据库结构
id |id_thread | id_sender| is_read | status
_______________________________________________
1 | 2 | 2 | n | 1
2 | 2 | 1 | n | 1
答案 0 :(得分:10)
saveField仅用于处理当前加载的记录。要更新同一模型的多个记录,请使用updateAll
。
用法:
Model :: updateAll(array $ fields,array $ conditions)
在一次通话中更新许多记录。要更新的记录由$ conditions数组标识,要更新的字段及其值由$ fields数组标识。
在您的情况下,它看起来像这样:
$this->Contact->updateAll(
array( 'Contact.is_read' => 'y' ), //fields to update
array( 'Contact.id_thread' => $id ) //condition
);
答案 1 :(得分:1)
您的id_thred
字段似乎不是唯一的。因此,即使您进行SQL查询来更新数据,它也会更新这两行。这是你期待的吗?
我的建议是调用条件id_thread
的查找方法并获取主键ID并使用saveField
方法更新值