読者です 読者をやめる 読者になる 読者になる

cakephpで物理削除時はdeleteかdeleteAllを使う

cakephp

いっつも忘れて以前のソースを探す時間を毎回ムダにするのでまとめておく。

<?php
// deleteの場合
$id = 1;
if ($this->Model->delete($id)) {
  // 成功
}

// deleteAllの場合
$param = array('xxx_id' => $id);
if ($this->Model->deleteAll($param)) {
  // 成功
}

テーブルのidを指定して削除するときは、deleteを使い、別のカラムを指定したい場合は、deleteAllを使う。

注意事項として、データが存在しなかった場合falseを返すので、データの有無によらずdeleteを実行したい場合は、エラーをチェックをしないようにする。(もちろんDBエラーも検出できなくなるのでケースバイケース)

deleteAllを実行した際の挙動について

$paramの条件でテーブルを一度selectする
selectの結果がなければ、falseを返して終了
結果があれば、マッチしたデータに対してdeleteをかける
trueを返して終了