2012-05-09 11 views
2

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

使用されるコードは

$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 

答えて

9

saveFieldのみ現在ロードされたレコード上で動作するように意図されsaveField方法を使用して値を更新するだろう。同じモデルの複数のレコードを更新するには、updateAllを使用します。

使用法:

モデル::すべて更新(配列$フィールド、配列$条件)単一の呼び出しで

アップデート多くのレコード。更新されるレコードは$ conditions配列で識別され、更新されるフィールドとその値は$ fields配列で識別されます。あなたのケースでは

source

、それは次のようになります。

$this->Contact->updateAll(
    array('Contact.is_read' => 'y'), //fields to update 
    array('Contact.id_thread' => $id) //condition 
); 
1

あなたid_thredフィールドは、一意であるように思われません。したがって、データを更新するSQLクエリを作成しても、2つの行が更新されます。これは、あなたが期待しているものですか?

私の提案は条件id_threadでFindメソッドを呼び出して、主キーIDを取得し、

+0

いや、まさに私が欲しいの更新複数の行、その –

関連する問題