ã¾ã¨ã‚(1) ã§ã¯1対1ã®ã‚¢ã‚½ã‚·ã‚¨ãƒ¼ã‚·ãƒ§ãƒ³ hasOne ã§ã—ãŸãŒã€
今回ã¯1対多ã®ã‚¢ã‚½ã‚·ã‚¨ãƒ¼ã‚·ãƒ§ãƒ³ hasMany ã§ã™ã€‚
例ãˆã°ã€ä¸€äººã®ãƒ¦ãƒ¼ã‚¶ã«è¤‡æ•°ã®ã‚³ãƒ¡ãƒ³ãƒˆæŠ•稿ãŒã‚るよã†ãªå ´åˆã§ã™ã€‚
データベースã¯
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 posts(
id int unsigned auto_increment primary key,
user_id int unsigned unique,
comment text,
created datetime default NULL,
modified datetime default NULL
);
ã®ã‚ˆã†ãªå ´åˆã€ã‚¢ã‚½ã‚·ã‚¨ãƒ¼ã‚·ãƒ§ãƒ³ã®å®šç¾©ã¯ä¸‹è¨˜ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚
< ?php
class User extends AppModel
{
var $name = 'User';
var $hasMany = array('Post' =>
array('className' => 'Post',
'conditions' => '',
'order' => '',
'foreignKey' => 'user_id',
'dependent' => true,
'exclusive' => false,
'finderQuery' => ''
)
);
}
?>
ã“れã§ã€
$this->User->findById($id);
ã¨ã™ã‚‹ã¨ä¸‹è¨˜ã®ã‚ˆã†ã«ãƒ‡ãƒ¼ã‚¿ã‚’å–å¾—ã§ãã¾ã™ã€‚
Array
(
[User] => Array
(
[id] => 1
[nickname] => boze
)
[Post] => Array
(
[0] => Array
(
[id] => 1
[user_id] => 1
[comment] => コメント1ã§ã™
)
[1] => Array
(
[id] => 1
[user_id] => 1
[comment] => コメント2ã§ã™
)
....
)
);
ã¾ãŸã€hasOne ãªã©ã¨åŒæ§˜ã« CakePHP ã®å‘½åè¦ç´„ã«å¾“ã£ã¦ã„れã°ã€foreignKey ã¯æŒ‡å®šã—ãªãã¦ã‚‚大丈夫ã§ã™ã®ã§ã€æœ€ä½Žé™
var $hasMany = array('Post');
ã§ã‚‚アソシエーションを定義ã§ãã¾ã™ã€‚
ã¾ãŸã€hasMany ã§æŒ‡å®šã™ã‚‹é…åˆ—ã®æ„味ã¯ä¸‹è¨˜ã®é€šã‚Šã§ã™ã€‚
className
関連付ã‘ãŸã„モデルã®ã‚¯ãƒ©ã‚¹å
conditions
hasMany ã§å–å¾—ã—ãŸã„ãƒ‡ãƒ¼ã‚¿ã®æ¡ä»¶ã‚’指定ã™ã‚‹ã€‚ SQL ã®æ¡ä»¶æ–‡ã€‚
order
関連ã™ã‚‹ãƒ¢ãƒ‡ãƒ«ã®ãƒ‡ãƒ¼ã‚¿ã®ä¸¦ã³é †ã€‚SQL ã® ORDER å¥ã®æŒ‡å®šæ–¹æ³•。
Post.created DESC
テーブルåをカラムåã®å‰ã«ä»˜ã‘ãªã„ã¨ã€User.created ã¨åŒºåˆ¥ã§ãã¾ã›ã‚“。
limit
Cake ãŒå–り出ã™é–¢é€£ãƒ¢ãƒ‡ãƒ«ã®ãƒ‡ãƒ¼ã‚¿ã®æœ€å¤§æ•°ã€‚
‘limit’ => 5 ã®ã‚ˆã†ã«æ•°å—ã§æŒ‡å®šã€‚
foreignKey
関連ã—ã¦ã„るモデルを指ã—ã¦ã„る外部ã‚ーã®åå‰ã€‚
Cake ã®å‘½åè¦ç´„ã«å¾“ã£ã¦ã„ã‚‹å ´åˆã¯çœç•¥å¯èƒ½ã€‚従ã£ã¦ã„ãªã„å ´åˆã¯ã“ã“ã§æŒ‡å®šã™ã‚‹ã€‚
dependent
true ã«è¨å®šã™ã‚‹ã¨ã€ãƒ¢ãƒ‡ãƒ«ã®ãƒ‡ãƒ¼ã‚¿ã®å‰Šé™¤æ™‚ã«é–¢é€£ã—ã¦ã„るモデルå´ã®ãƒ‡ãƒ¼ã‚¿ã‚‚削除ã•れる。
exclusive
true ã«è¨å®šã™ã‚‹ã¨ã€é–¢é€£ã—ã¦ã„ã‚‹ã™ã¹ã¦ã®ã‚ªãƒ–ジェクトãŒä¸€ã¤ã® SQL ステートメントã§å‰Šé™¤ã•れる。
finderQuery
アソシエーションをå–り出ã™ãŸã‚ã«ã€å®Œå…¨ãª SQL ステートメントを指定ã™ã‚‹ã€‚
CakePHP 日本語マニュアル
6.4. アソシエーション
Recent Comments