CakePHP2のModelのdeleteメソッドでリレーション先が消えないとき


みなさんこんにちは!

リレーションを組んでリレーション先も同時に消す方法を勘違いしていたので自分の戒めのためにメモとして残しておきます。


データを消すときはdeleteメソッドを使ってcascadeをtrueにすればリレーション先も消してくれると思っていました。
ただドキュメントよく見ると、この値、defaultではtrueなんですよね・・・

これではうまく消えない・・・ではどうすればいいのかというとリレーションを組んでいる部分でdependentオプションをtrueにしておかなければならないのです(´・ω・`)
つまり2箇所をしっかりtrueにしておけばリレーション先もうまく消えてくれる、ということです。

これだけではブログ記事としてはなんだかなぁなので一応確認しておきます。

データベース、コードの確認

CakePHPは前まとめたもので作ってあることを前提とします。
試してみたい方は以下の記事でプロジェクトを作る部分までやっておいてください。

CakePHP2をComposerでインストールしてプロジェクトを立ち上げるまで

そしてデータベースは以下のようなものを準備します。適当なので気にしないでください。

User.phpはこんな感じ

Model/User.php

Controller/UsersController.php

最後にView

View/Users/index.ctp

これで/users/にアクセスして削除をおしてみてください。
その後データベースを確認してうまく消えていますか?

User.phpの10行目をコメントアウトしてデータを入れなおしてもう一度消してみてください。
今度はリレーション先が消えていませんよね?それで僕は少しはまりましたw

最後に

CRUDというCakePHPのプラグインがあるのですが、その中身でdeleteメソッドの部分にcascadeを指定する場所がなかったので。あれ?これおかしいのかな?とか思ってた自分が一番おかしかったです(´・ω・`)

何事も常に見なおしてしっかり確認していかないとダメですね。

僕のようなことを繰り返さないためにも

CakePHP2 実践入門 (WEB+DB PRESS plus)
安藤 祐介 岸田 健一郎 新原 雅司 市川 快 渡辺 一宏 鈴木 則夫
技術評論社
売り上げランキング: 95,908

更新情報はFacebookページで!

ブログの更新、読んで役立つ他ブログの記事などを更新しています。




関連のある記事


質問があればこちらからどうぞ