スポンサードリンク
ようやく、動きがつかめてきた感じのCakePHP
まだまだ奥が深いです。
でも、面白いですね。
さて、今回は論理削除をしたときに
アソシエーションしているモデルも論理削除させることをしました。
少々、強引ですが・・・
スポンサードリンク
強引な論理削除の方法
内容としては、削除の動きをした後で
アソシエーションモデルを論理削除のように
saveしてしまえということです。
Postモデル →hasMany→ UserPostモデルの場合
public function delete($id = null) { if ($this->request->is('get')) { throw new MethodNotAllowedException(); } //論理削除はfalseを返す if (!$this->Post->delete($id, true)) { $sql = 'UPDATE table SET deleted = 1, deleted_date = NOW() WHERE post_id = ' . $id; $this->UserPost->query($sql); $this->autoRender = false; $this->Session->setFlash( $id . ' を削除しました。'); $this->redirect(array('action' => 'index')); } }
もっとスマートに行きたいですが、
とりあえずsqlで直接論理削除させてみました。
まあ、削除というよりも保存ですね。
これ作りながら
じゃあ、ビヘイビアなくてもいいじゃね~って思いましたが
それは、それで・・・。
ちなみに、物理削除でアソシエーションモデルまで削除する場合は
モデル側にdependentを記述します。
var $hasMany = array( 'UserPost' => array( 'dependent' => true, ); );
そして、deleteメソッドの第2引数にtrueを付けます。
$this->Post->delete($id, true)
しかし、ビヘイビアではこれは効きません。
上のコードは一応つけてますけど・・・
(参考)
CakePHP]deleteAll()やdelete()の$cascadeはmodel側の設定も必要
スポンサードリンク