ECWorks Blog

ECWorks Blog

CakePHPを中心としたサイト開発情報をメインに公開。新しもの好きなので時々製品レポートなんかも。

【CakePHP】アソシエーションの図解

 すみません。最近とっても忙しくて、更新どころではありませんでした。

 予定していた連載も出来る状態ではなかったため、フェードアウト気味でした。まだちょっと出来るような状況ではないため、こちらの方はもうしばらくお待ちください。
 それから、SmartyViewのアップデートもしなければならないのですが、こちらもなかなかアーカイブを作る暇が無く(というか、こちらの方はただ単に面倒くさくてやっていないだけだと思う(大汗))、まだ更新していません。ごめんなさい。近日中には上げます。

 さて、本題にはいりますが…
 今更なんですが、業務としてCakeを使い始めています。
 安定性重視で1.1でやっていくつもりでいたのですが、1.2でも問題がなさそうなので(PostgreSQLを扱うために、bdo_source.phpだけはアップデートしています)、こちらの方で開発しています。
 また、デザイン等を考慮する必要もないため、勉強も兼ねてSmartyViewは使わず純正でやっています。

 だいぶCakeのことが分かってきたのですが、「アソシエーション」の基本的なことがイマイチ理解できていなかったのですが、図を書いてようやく分かりました。つまりこういうことだったのですね!

association.gif

 hasOneとhasManyは単数か複数かの違い、belongsToはhasOneの逆方向の意味だというのは何となく分かっていたのですが、hasAndBelongsToManyの意味が理解できなかったんです。上図の例でいくと、BookmarkとKeywordだけで、両方向から複数のつながりを表すのかと思っていたのですが、bookmark_keywordsという別テーブルを作ってそれぞれのidを定義することで双方向で複数形を表すんですね。Cakeを使う前も、もちろんこういう考え方はしていましたが、Cakeではテーブルさえ用意すれば、特にモデルで定義する必要はなく、BookmarkにKeywordを、KeywordにBookmarkをhasAndBelongsToMany定義するだけで動かすことが出来る、ということなんですね。

 今回の案件ではbookmark_keywordsにも意味を持たせたかったりとか、登録方法が若干特殊なため、hasManyを双方向でかけているのですが、通常時では楽できそうです。

 あとはバリデーションがうまく使いこなせるようになりたいです。
 なんか1.1とやり方が変わっているみたいで、随時バリデートをかけながら登録するのなら問題ないのですが、まとめてバリデートをかけて、全部問題ないことを確認してから登録するような仕組みには使えなくなってしまったようなので、今回はとりあえずControllerのなかでチェックしてしまっています。この辺は1.1の仕様に戻して欲しいなぁ…



このエントリをはてなブックマークに追加 このエントリをLivedoor Clipに追加 このエントリをYahoo!ブックマークに追加 このエントリをdel.icio.usに追加 このエントリをFC2ブックマークに追加 このエントリをNifty Clipに追加 このエントリをPOOKMARK. Airlinesに追加 このエントリをBuzzurl(バザール)に追加 このエントリをChoixに追加 このエントリをnewsingに追加 

1 Comment

Trackbacks

  1. Web屋に復帰した人間のリハビリ日記» ブログアーカイブ » CakePHP アソシエーションよくわからん

Leave a Response

コメントは承認待ちです。表示されるまでしばらく時間がかかるかもしれません。