I love iPhone, Android, Cocos2d-x
CakePHP アソシエーションのまとめ(1)
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. アソシエーション
関連する投稿
One comment
コメントをどうぞ
Additional comments powered by BackType
[...] アソシエーションのまとめ(1) で書いた [...]