[CakePHP]ID以外を条件として指定して更新処理を行う

ちょこっとはまったので覚え書き程度に。。。

CakePHPでは、Model::save()によって自動的に、insertとupdateを振り分けるようになっています。

で、id以外を条件としたい場合(column1の値がnのcolumn2の値を更新したい などなど)は以下のような形で行えます。

// test_controller.
function update() {
    if(!empty($this->data)) {
        $this->Model->updateAll(array(
            "column2" => "更新したい内容"
        ), array(
            "column1" => "hogehoge"
        ));
    }
}

※これで更新処理はおこなえますが、上述の状態では、インジェクションが行えるような状態(エスケープされていない)ので、エスケープ処理も含める必要があります。

第一引数は更新したいカラム名と値がペアになっている配列、第二引数が条件として指定したい配列を指定します。

後は注意書き通り、エスケープ処理を忘れずに施せば、完了です。

ちなみに、エスケープ処理はConnectionManagerからデータソースを引き上げて、Db::escape()で行えます。