Cakephp:更新记录而不引用主键

时间:2012-05-09 04:21:12

标签: php cakephp

我正在尝试更新与其线程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  

2 个答案:

答案 0 :(得分:10)

saveField仅用于处理当前加载的记录。要更新同一模型的多个记录,请使用updateAll

用法:

  

Model :: updateAll(array $ fields,array $ conditions)

     

在一次通话中更新许多记录。要更新的记录由$ conditions数组标识,要更新的字段及其值由$ fields数组标识。

     

source

在您的情况下,它看起来像这样:

$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方法更新值