CakePHPã®å
¥åæ¬ãèªåã§ã«ã©ã ã«çŽã¥ããªãæã«çãããš
Formãã«ããŒã§åºåãããã©ãŒã ç³»ã®inputããselectããtextareaããã®å
¥åæ¬ã
èŠå®ã§ã¯ããŒã¿ããŒã¹ã®ã«ã©ã ã®åãã«ã©ã åã«å¿ãã圢ã§èªåçã«åºåããããã©ãããŸãããšèšå®ãããªãå Žåã¯å
šéšinput type="text"ã§åºåãããã
äœãåå ã§ããŸãããšèšå®ãããŠããªãã®ããçãã¹ããã§ãã¯ãã€ã³ãã
ãšã³ãã£ãã£ãŒãæž¡ã(ã)ãŠããªã
ã¢ãœã·ãšãŒã·ã§ã³ãæ£ãããªã
ãã®2ç¹ãçã£ãŠã¿ãŠã
ãšã³ãã£ãã£ãŒãæž¡ã(ã)ãŠããªã
CakePHP2ã䜿ã£ãããšãããå Žåã«1åãããåŒã£ããããããããªãåé¡ã
<?=$this->Form->create('User')?>
ã®ããã«ãããŒãã«åãæž¡ããŠãã©ãŒã ãéå§ããŠããã
ã§ãCakePHP3ã§ã¯ããšã³ãã£ãã£ãŒãæž¡ãããšã«ãªã£ãŠããã
<?=this->Form->create($user)?>
ãã¡ããããã®åã«ã³ã³ãããŒã©ãŒåŽã§ãã¥ãŒã«æž¡ã倿°ãšããŠãšã³ãã£ãã£ãŒãçšæããªããã°ãããªãã
// ãªã¯ãšã¹ãããŒã¿ãããŠãŒã¶ãŒãšã³ãã£ãã£ãŒãäœæ
$user = $this->Users->newEntity ( $this->request->data );
// ãŠãŒã¶ãŒãšã³ãã£ãã£ãŒããã¥ãŒã«æž¡ã
$this->set('user', $user);
ãªã¯ãšã¹ãããŒã¿ïŒãªã«ããã
äŸãã°ããŠãŒã¶ãŒãå
šãŠã®å
¥åãå®äºããŠéä¿¡ãã¿ã³ãæŒãããã©ããµãŒããŒåŽã§ããªããŒã·ã§ã³ãããçµæå
¥åãšã©ãŒãšãªã£ãããããšã©ãŒã¡ãã»ãŒãžãåºããŠåå
¥åãä¿ãå Žåã
ãã¡ãã¡ãŸã£ãããªãšã³ãã£ãã£ãŒã§ãã©ãŒã ã衚瀺ããã®ã¯äžèŠªåãªã®ã§ãå
¥åå
容ã¯ãã®ãŸãŸãè¿ãããããå¿
èŠãªãšããã ãçŽããŠãããšããã
ååã®åŠçã§ãªã¯ãšã¹ãããŒã¿ããªããã°ç¡èŠãããã®ã§å®å¿ã
ã¢ãœã·ãšãŒã·ã§ã³ãæ£ãããªã
ä»åã®äŸã§ãããšããã®ããŠãŒã¶ãŒããŒãã«èªäœã«ååšããã«ã©ã ãç·šéããinputã®å Žåã¯ãããã©ããã®ã¬ã³ãŒãã«çŽã¥ãå¥ã®ããŒãã«ã®ããŒã¿ãå
¥åããå Žåã
ããŒãã«ã¯ã©ã¹ã§ã¢ãœã·ãšãŒã·ã§ã³ãå®çŸ©ããã
ã¢ãœã·ãšãŒã·ã§ã³ãå«ãããšã³ãã£ãã£ãŒãçæããã
ãã©ãŒã ãã«ããŒã«æ£ããé¢é£ã¬ã³ãŒããæå®ããã
1. ããŒãã«ã¯ã©ã¹ã§ã¢ãœã·ãšãŒã·ã§ã³ãå®çŸ©ããã
CakePHPã®ã¢ãœã·ãšãŒã·ã§ã³ã®æŠå¿µã«ã€ããŠã¯CakePHP 2ã®Cakebookã§äžå¯§ãªèª¬æãèªããã
http://book.cakephp.org/2.0/ja/models/associations-linking-models-together.html
CakePHP 3ã§ã®æžãæ¹ã«ã€ããŠã¯ããã§ããŸã è±èªçãããªããã©ãäžãèªãã åŸãªãæ¬æé£ã°ããŠãµã³ãã«ã³ãŒãã ãèªãã°OKã
http://book.cakephp.org/3.0/en/orm/associations.html
äžç¹ãhasAndBelongsToMany(HABTM) ã belongsToMany ãšåŒã³åãå€ãã£ãã端çã§ããããã
深远ããããšè¶£æšããã¬ãã®ã§åèæç®ã®ç޹ä»çšåºŠã«ããŠããã
2. ã¢ãœã·ãšãŒã·ã§ã³ãå«ãããšã³ãã£ãã£ãŒãçæããã
ãšã³ãã£ãã£ãŒçæã®éãé¢é£ããŒãã«ããšã³ãã£ãã£ãŒã«å«ãããã¹ãããããšã³ãã£ãã£ãŒãçæããã
// ãªã¯ãšã¹ãããŒã¿ãããŠãŒã¶ãŒãšã³ãã£ãã£ãŒãäœæ
$user = $this->Users->newEntity ( $this->request->data, [
'contain' => 'Avatars'
]);
ãããªæãã§ãäŸãã°User has one Avatarãªãšã³ãã£ãã£ãŒãçæã
ã¢ãã¿ãŒã®ããã«ãã®å
ã«å¥ã®ããŒãã«ãæã€å Žåã¯ããã
// ãªã¯ãšã¹ãããŒã¿ãããŠãŒã¶ãŒãšã³ãã£ãã£ãŒãäœæ
$user = $this->Users->newEntity ( $this->request->data,[
'contain' => [
'Avatars',
'Avatars.Tags'
]
]);
Avatar belongs to many Tagsãªæ³å®ã§ãããã¯ã¢ãœã·ãšãŒã·ã§ã³ã®çš®é¡ãå€ãã£ãŠãç¹ã«æžãæ¹ã«å·®ã¯ãªãã
ã¡ãã£ãšããŸãããšæ¶ç©ºã®ã¢ãœã·ãšãŒã·ã§ã³ãæãæµ®ãã°ãªããŠããåãããªããµã³ãã«ã«ãªã£ãŠããã©ãèš±ãã
äœè«
ã¡ãªã¿ã«'Avatars.Tags'ã ãã§ãã¡ãããšAvatarsãšTagsãå«ããŠããããå人çã«é段ç¶ã«æžããŠããã®ãæŽçãããŠããŠèŠãããã
éæ®µ
A
A.B
A.B.C
A.D
A.D.E
æ¬åœã¯
A.B.C
A.D.E
ã ãã§ãåããã©ãAã2åæžããŠããæç¹ã§1åããæžããªãããšã培åºã§ããªãããããªãæåãããããããªãã
3. ãã©ãŒã ãã«ããŒã«æ£ããé¢é£ã¬ã³ãŒããæå®ããã
<?=$this->Form->input('-ãã®éšå-')?>
ãŸãããŠãŒã¶ãŒããŒãã« (createã¡ãœããã«æž¡ãããšã³ãã£ãã£ãŒèªäœ) ã®ã«ã©ã ã®å Žåãäœã工倫ããã«ã«ã©ã åããã³ã
<?=$this->Form->input('name')?>
次ã«hasOneãŸãã¯belongsToãªããŒãã«ã®ã«ã©ã ã®å Žåã
ã¢ãœã·ãšãŒãããããšã³ãã£ãã£ãŒã¯ã芪ãšã³ãã£ãã£ãŒã«å¯ŸããŠå°æå衚èšã®ããããã£ãŒåã§è¿œå ãããã®ã§ãinputã«æž¡ãéãããã«åŸããhasOneãŸãã¯belongsToã®å Žåã¯å°æå衚èšã«å ããŠåæ°åœ¢ãšãªãã
(衚èšã¯ã¢ãœã·ãšãŒã·ã§ã³èšå®æã«ä»»æã®åç§°ã«å€æŽå¯èœã)
<?=$this->Form->input('avatar.title')?>
ã¢ãã¿ãŒã«ã¿ã€ãã«ãªããã€ããããã
次ãè¿·ããã¡ã hasManyãŸãã¯belongsToManyãªããŒãã«ã®ã«ã©ã ã®å Žåãè€æ°åœ¢ã®å°æå衚èšã«å ããŠãã€ã³ããã¯ã¹ãæå®ããŠããã«ã©ã åããã³ã
<?=$this->Form->input('avatar.tags.0.name')?>
ã¢ãã¿ãŒã«çŽã¥ãè€æ°ã®ã¿ã°ã®ãã¡ã0çªç®ã®ã¬ã³ãŒãã®nameã«ã©ã ã§ããããšèªãã
ã¢ãã¿ãŒã«ã¿ã°ãªããã€ããããã
0çªç®ãšããã®ã¯æ¬åœã«ããŒã¿ããŒã¹å
šäœã®è©±ã§ã¯ãªããä»ç»é¢äžã§ç·šéäžã®ã¬ã³ãŒãã®ãã¡0çªç®ããã§ã«ã²ãšã€ã¿ã°ãã€ããŠããã¢ãã¿ãŒã«å¯ŸããŠãæ°èŠã«0çªç®ãç·šéããã°2ã€ã®ã¿ã°ãã§ãããããšã³ãã£ãã£ãŒçææã«ãã§ã«ããã¿ã°ãfindããŠãããšã³ãã£ãã£ãŒãäœã£ãå Žåã¯0çªç®ã«æ¢åã®ã¿ã°ã®ååã衚瀺ããç·šéã§ããã
(ãã®å Žåã¯ãµã€ãforeachãšãã§æ¢åã®ã¿ã°æ°åã«ãŒãããŠè€æ°ã®å
¥åæ¬ãåºãã®ã ããã)