CakePHP : beforeDelete() でちょっと幸せになる
CakePHP のコールバック関数たちは優秀ですね。
もちろん便利に活用させてもらってます。
今日は afterDelete() で後処理を色々する場合の、beforeDelete() を使ったちょっとしたTipsをご紹介します。
afterDelete() では $this->data は空
$this->id は格納されているのですが、$this->data は空なんです。
ま、afterDelete() でデータを利用しない方も多数でしょうから、無駄な処理は入れてないんでしょうね。
ただ関連するデータをアップデートしたりと、削除されるインスタンスが保持するデータを利用したいケースってのも結構あったりします。
これを beforeDelete() で楽して解決してしまおうという主旨です。
beforeDelete() で $this->data をセット
app_model.php に単純に以下のようなコードを書きます。
これで自動的に $this->data はセットされ、 afterDelete() などでデータを使いまわせます。
<?php /** * Before delete callback. * The function is cakephp callback method. * * @return boolean */ function beforeDelete() { // 削除する前に保持するデータをオブジェクトに置いておく // こうすることで、afterDelete() で保持データを利用できる。 // 通常では $this->id しか保持されない。 $this->data = $this->find('first', array( 'recursive' => 0, 'conditions' => array($this->name . '.id' => $this->id) )); return true; } ?>
afterDelete() で $this->data を利用するサンプル
私は以下のような形でデータを利用しています。ご参考までに。
<?php /** * After delete callback. * The function is cakephp callback method. * * @return boolean */ function afterDelete() { // Update association model if (!$this->_updateSummary($this->data['ModelName']['forign_key_id'])) { $this->log("Model->afterDelete() Update summary is failed."); } return true; } ?>