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) で書いた [...]