元記事:
How to update a single field in CakePHP Danny's Learning Box単一のフィールドの値を保存するには、
saveFieldメソッドがあります。
- $this->Post->id = 15;
- $this->Post->saveField('hits', 1);
$this->Post->id = 15;
$this->Post->saveField('hits', 1);
実行してみれば分かりますが、`modified`フィールドも更新されてしまいます。
記事のヒット数を増やすだけなら、modifiedが更新されると困る。
そこで、元記事のコード。(オリジナルとは違うよ)
- $data = array(
- 'Post' => array(
- 'id' => 15,
- 'hits' => 1,
- 'modified' => false
- )
- );
- $this->Post->save($data, false, array('hits'));
$data = array(
'Post' => array(
'id' => 15,
'hits' => 1,
'modified' => false
)
);
$this->Post->save($data, false, array('hits'));
第2引数でバリデーションをオフ。
第3引数でセーブしたいフィールドを配列で指定。
実行してみるとmodifiedは更新されず。
- UPDATE `posts` SET `hit` = 1 WHERE `posts`.`id` = 15
UPDATE `posts` SET `hit` = 1 WHERE `posts`.`id` = 15
ミソはmodifiedに
null以外の値を渡すことです。
だから、
trueでも良いし、
2009-09-11でも良い。
何となく、更新したくないんだからfalseが良いかな、ってことで例ではfalseを代入しました。
It is important that `modified` does not have value of
null,
if you don't hope to update `modified` field.
(元記事が英語だから英語で書いてみたけど、あってんのかな?)
CakePHP User in Japan
modifiedフィールドを更新したくない場合・・・この投稿の問題も解決ですな。