読者です 読者をやめる 読者になる 読者になる
一人もくもく会 α verでサービス開始しました。

HABTMの注意事項

CakePHP

CakePHP1.2でloadModelを使ってモデルを用意することがあるが、
その際予期していたクラスでなく、AppModelが入ってくることがある。

ひとつの原因として、綴りミスがある。
しかし綴りは合っているのにAppModelになってしまったり、
loadModelする場所によってAppModelになったりちゃんとしたクラスが呼び出されたりする。

この原因はHABTMにある場合がある。

たとえばposts, posts_tags, tagsというテーブルがあったとする。
この時、posts_controller.phpでは自動的にposts_tagsとtagsが初期化されるのだが、
この時連結であるposts_tagsがAppModelとして初期化されていた。
そのため、以後loadModelでPostsTagを呼びだすとAppModelとして返ってきてしまい、
PostsTagに宣言してあった関数などが呼び出せなくなったりしてしまう。
(すべての環境、バージョン等でそうかは知らない)

対処法としては、PostモデルのHABTM以外にhasManyとしてPostsTagを宣言しておけば良い。
ご注意を。