CakePHPのupdateAllでDATE型、DATETIME型が更新されない

CakePHPのupdateAllでDATE型、DATETIME型が更新されないCakePHP2

upateAllメソッドを使って、条件に当てはまるレコードを一気にアップデートしたい場合があります。updateAllメソッドを使うと便利なのですが、日付の更新をしようとすると【0000-00-00】みたいになってしまって、正しく更新できません。

以下のように、シングルコーテーションで囲ってあげると正しく更新されるようになります。

$targetDate = date('Y-m-d');

$updateInfo = [
	'target_date' => "'{$targetDate}'",
];

$condition = [
	// ここに条件
];

$this->updateAll($updateInfo, $condition);

 

updateAllあupdate文を生成すると、文字列などに対して自動でシングルコーテーションをつけてくれないために、正しく更新されません。手動でシングルコーテーションをつけると、正しく更新されます。

手動でシングルコーテーションをつけるということは、SQLインジェクション等のセキュリティ的に考慮しないといけないということですね。気をつけましょう。