例えば、
・users テーブル(ユーザの基本データ)
・profiles テーブル(ユーザの詳細情報)
・posts テーブル(投稿データ)
・tags テーブル(タグの種類)
・posts_tags テーブル(投稿データとタグの関連情報)
があったとします。CakePHP の model にきちんとこの関連情報を設定すると、
【パターンその1】
・$this->User->findById(ユーザID)で、users と profiles の両方の情報が取ってこれます。
・$this->Profile->findByID(ユーザID)で、users と profiles の両方の情報が取ってこれます。
※つまり、親子関係のあるテーブルのどちらからでも両方まとめて情報を取ってこれますし、細かい条件を指定できます。
また、
【パターンその2】
・$this->User->findById(ユーザID)で、users と profiles の両方の情報、またすべての投稿データも取ってこれます。
・$this->Post->findById(ID)で、投稿したデータと、それについているタグデータをすべて取ってこれます。
※これに関しても細かく条件が設定されているので、例えば、“承認された投稿(コメント)のみ出力”とか、“時間軸で並べ替えて出力”といったこともできます。
【パターンその1】と【パターンその2】で違うところは、“1対1の関係”か、“1対多の関係”かというところです。
【パターンその1】用として、
・hasOne (親から子を見る)
・belongsTo (子から親を見る)
【パターンその2】用として、
・hasMany (親から子どもたちを見る)
・hasAndBelongsToMany[HABTMとも言う。](二つのテーブルが、もう一つのテーブルで関連づけられている状況をまとめあげる)
があります。