CakePHP のアソシエーションのまとめです。
タイトルに (1) とつけたので多分何回か続けます。

アソシエーションとはモデル間のつながりのことです。

例えば、下記のような2つのテーブルがあると

CREATE TABLE users(
    id int unsigned auto_increment primary key,
    nickname varchar(30) NOT NULL,
    created datetime default NULL,
    modified datetime default NULL
);

CREATE TABLE profiles(
    id int unsigned auto_increment primary key,
    user_id int unsigned unique,
    blog_url varchar(256),
    hobby varchar(256),
    created datetime default NULL,
    modified datetime default NULL
);

CakePHP では2つのモデルになります。
User モデルと Profile モデルです。
この2つのモデルは1対1の関係になります。
「一人のユーザは1つのプロファイルを持つ」とういことです。

この2つのモデルの関係を CakePHP に指示するには次のようになります。

< ?php
class User extends AppModel
{
    var $name = 'User';
    var $hasOne = array('Profile' =>
                    array('className' => 'Profile',
                          'conditions' => '',
                          'order' => '',
                          'dependent' => true,
                          'foreignKey' => 'user_id'
                    )
                  );
}
?>

これで、
$this->User->findById($id);とすることにより、

Array
(
    [User] => Array
        (
            [id] => 1
            [nickname] => boze
        )
    [Profile] => Array
        (
            [id] => 1
            [blog_url] => http://www.syuhari.jp/blog
            [hobby] => 読書
        )
);

のようにUser モデルだけでなく、Profileモデルの情報も同時に取得することができます。

CakePHP の命名規則を守っていれば、
var $hasOne = array('Profile');だけでもいけるようです。
※外部キーはモデル名+_id

CakePHP 日本語マニュアル
6.4. アソシエーション

関連する投稿