質問: `save()` と `updateAll()` は違い、modified カラムが自動で更新されないのと、更新する値は自分の方でサニタイズする必要があります。 どういった考えてこのような実装になっているのでしょうか?
回答: 「値をサニタイズしないといけない」と考えるならデメリットですが、「値の代わりにSQLの式を指定できる」ということでもあります。これは複数のレコードを一度に更新する時に便利です。 例えば「20歳未満のユーザーの所持金を100増やしたい」というケースを考えます。 もし`save`でやるなら、`find('all', ...)`で対象レコードを取得して、一件ずつ更新することになるでしょう。これは効率が悪いですね。SQLならこうやって書けるのに。 ``` UPDATE users SET money = money + 1 WHERE age < 20 ``` これと同じことがCakePHP上でできるのが、`updateAll`です。 ``` $this->User->updateAll( array('money' => 'money + 100'), array('age <' => '20') ); ``` もし`updateAll`が自動でサニタイズする仕様なら、`money + 100`という式を書くことができず、「money + 100」という文字列になってしまいます。 `modified`が更新されないことについては上記のようなはっきりした理由は思いつきませんが、「updateクエリのようなもの」として考えれば、なるべく余計なことはしないというデザインなのかもしれません。