2017年06月 / 05月≪ 123456789101112131415161718192021222324252627282930≫07月

インフォメーション

FC2ブログで画像等を一括アップロードするソフトを地味に配布してます。
FC2ブログ用ファイルアップロードの最新版はこちら
(ベクター)FC2ブログ用ファイルアップロード

--.--.-- (--)

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


 |  --:--  |  スポンサー広告  |  Top↑

2011.01.19 (Wed)

CakePHPのモデルの結合メモ

ややこしいんでメモ。
foreignKeyとか、やっと理解できるまで意味不明すぎたので忘れたらまた引っかかると思う。

モデル内に$hasOneとか$belongsTo等の結合ルールを宣言すると、
その宣言したモデルをfindした場合に自動で結合ルールに基づいたテーブルデータも合わせて取得する。

■$hasOne
1対1。外部モデルを1個取得
自モデルのidと、外部モデルの任意のフィールドに結合できる。
自モデルの結合フィールドはid固定。別のフィールドと結合したい場合はhasOne以外を使う。

自モデル.id=外部モデル.foreignKeyに設定した値
Mymodel.id = Othermodel.mymodel_id

の条件で取得される。

foreingKeyを指定しない場合は「自モデル名_id」がデフォルトに。
foreingKey=falseにすると、自モデル名.id=..の条件は付加されなくなるっぽい。

■$belongsTo
多対1。hasOneと同じく外部モデルを1個取得。
自モデルの任意のフィールドと、外部モデルのidフィールドに結合できる。
外部モデルの結合先はid固定。

自モデル.foreignKeyに設定した値=外部モデル.id
Mymodel.othermodel_id = Othermodel.id

の条件で取得される。

foreingKeyを指定しない場合は「外部モデル名_id」がデフォルトに。
どっちのidに紐づけるかでhasOneかbelongsToかが変わる。

■$hasMany
1対多。外部モデルを複数取得。
自モデルのidと、外部モデルの任意のフィールドに結合できる。
自モデルの結合フィールドはid固定。

自モデル.id=外部モデル.foreignKeyに設定した値
Mymodel.id = Manymodel.tetetete_id

の条件で外部モデルが複数取得される。
foreingKeyを指定しない場合は以下略

■$hasAndBelongsToMany
は使ってないのとまだよく理解してないのでわからん。
自モデル、外部モデル両方に火もづけるフィールド名を指定できるみたい。

とにかくforeignKeyがどっちのモデルに対して設定されるのかを理解すればいける気がする。
$hasOne等に入れるconditionsは固定値のみなので、変数とか動的な値を入れる場合はfind時の引数のconditionsに入れればいいっぽい。
その際クラス名付加してくっきり区別するようにしないとえらーるかも。

参考
3.7.6 関連: モデルを結びつける


 |  10:46  |  PHP  |  トラックバック(0)  |  コメント(2)  |  Top↑

Comment

よく知らないんですけど、CakePHPってO/Rマッピングのフレームワークなんですかね?
昔、出始めのHibernateを仕事で使って痛い目にあったんですけど、その時のことを思い出しました。

フォーリンキーと聞いて、「フォーリンラブ」と返し、冷たい目で見られたことも思い出した。
いけいけ |  2011.01.23(日) 23:16 |  URL |  【コメント編集】

●Re: タイトルなし

O/Rマッピングって何?状態なんですけどググったらCakePHPはそれっぽいですね。
何か恐ろしい罠でもあるんでしょうか・・・
というかforeignが「フォーリン」と読むことを初めて知りました。
脳内では「ふぉれいぐん?」て呼んでたしw
イェスフォーリンラブ!
上野メモ |  2011.01.25(火) 04:28 |  URL |  【コメント編集】

コメントを投稿する

URL
コメント
パス  編集・削除するのに必要
非公開  管理者だけにコメントを表示
 

Trackback

この記事のトラックバックURL

この記事へのトラックバック

 | BLOGTOP | 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。