category_id を 0 に設定し、カテゴリ ID は自動インクリメントです。したがって、cakephp でこのレコードを更新すると、cakephp はこのレコードを更新する代わりにこのレコードを挿入します。
$this->Category->id=$id;
$this->Category->save($this->data);
助けてください...
CakePHP には、すべての識別子が真であるという暗黙の前提があります。
/**
* Returns the current record's ID
*
* @param integer $list Index on which the composed ID is located
* @return mixed The ID of the current record, false if no ID
*/
public function getID($list = 0) {
if (empty($this->id) || ...) {
return false;
}
...
そのため、0 の ID で保存しようとしても機能せず、偽の ID を持つ行が存在する場合でも、Cake は挿入を試みます。
id が 0 より大きい場合、Cakephp はレコードを更新し、それ以外の場合は新しいレコードを挿入します。そのため、id 0 を 0 より大きい値に変更してみてください。これを試してください。
私があなたを正しく理解しているかどうかはわかりませんが、すべてのレコードを WHERE category_id=0 で更新したい場合は、次のコードが効率的です:
$this->Category->updateAll(
$this->data,
array('Category.category_id' => 0)
);