CakePHP 1.2 の deleteAll
CakePHP 1.2 の saveAll その1
CakePHP 1.2 の saveAll その2
のエントリーを書いているときに deleteAll というメソッドがあり気になったので調べてみました。
CakePHP 1.1 で開発時に delete するときに ID を指定するしか方法がなく、ある条件でまとめて削除したいときなどは findAll してからループで delete していました。このときも条件を指定して削除する方法がないかとソースを調べたのですがありませんでした。
使い方は非常に簡単です。findAll のように条件を指定して deleteAll を実行するだけです。
$conditions = array('User.name'=>'suzuki'); if ($this->User->deleteAll($conditions)) { $this->Session->setFlash('削除しました'); } else { $this->Session->setFlash('削除に失敗しました'); }
実行される SQL は以下のような感じです。
SELECT `User`.`id` FROM `users` AS `User` WHERE `User`.`name` = 'suzuki' DELETE `User` FROM `users` AS `User` WHERE `User`.`id` IN (8, 10)
SELECT で条件に合う ID を抽出して WHERE IN で DELETE しています。
ただし CakePHP1.2 の削除ですが、MySQL 4.0 では SQL の DELETE 文でエラーになってしまいます。
MySQL 5.0 ではエラーにならずに削除できました。エラーになる原因は “DELETE” の後ろにテーブルのエイリアス名があるためです。
これは “cakephp1.2でのPostgreSQLエラー。” フォーラム – CakePHP Users in Japan でもあるように既に修正されているようですが、昨日 CakePHP のサイトからダウンロードした CakePHP 1.2.0.6311 beta ではまだ修正されていないようです。
関連する投稿
One comment
コメントをどうぞ
Additional comments powered by BackType
1self-satisfied…
…