2

スレッド ID に関してレコード数を更新しようとしています。id_threadフィールドが主キーではないという問題があります。しかし、私の知る限り、cakephp はプライマリ id に関連するコンテンツの更新のみをサポートしています。

使用コード

$this->contact->id_thread = $id;        
$this->Contact->saveField('is_read','y');

しかし、これは私にとってはうまくいきません。何か案は ?

私のDB構造

id   |id_thread |  id_sender| is_read | status
_______________________________________________
1    | 2        |   2       | n       | 1
2    | 2        |   1       | n       | 1  
4

2 に答える 2

10

saveField は、現在ロードされているレコードでのみ機能することを意図しています。同じモデルの複数のレコードを更新するには、 を使用しますupdateAll

使用法:

Model::updateAll(配列 $fields, 配列 $条件)

1 回の呼び出しで多くのレコードを更新します。更新されるレコードは $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クエリを実行してデータを更新しても、2つの行が更新されます。これはあなたが期待していることですか?

私の提案は、条件付きのfindメソッドを呼び出し、主キーIDを取得し、メソッドid_threadを使用して値を更新することです。saveField

于 2012-05-09T04:32:55.960 に答える