2

我正在尝试更新与其线程 ID 相关的记录数。这是我的id_thread字段不是主键的问题。但据我所知 cakephp 只支持更新与主要 id 相关的内容。

使用代码

$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  
4

2 回答 2

10

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

用法:

模型::updateAll(数组 $fields, 数组 $conditions)

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

来源

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

$this->Contact->updateAll(
    array( 'Contact.is_read' => 'y' ),   //fields to update
    array( 'Contact.id_thread' => $id )  //condition
);
于 2012-05-09T04:46:50.080 回答
1

你的id_thred领域似乎不是独一无二的。因此,即使您进行 SQL 查询来更新数据,它也会更新这两行。这是你所期待的吗?

我的建议是调用带有条件的查找方法id_thread并获取主键 id 并使用saveField方法更新值

于 2012-05-09T04:32:55.960 回答