
ãã®èšäºã¯ã Laravel5ã§ã®ãããžã§ã¯ãã®é·æã«ãããéçºäžã«ç§ãç¯ããéåžžã«äžå¿«ãªã¢ãŒããã¯ãã£äžã®ééãã®çµæãšããŠåŸãããäžçš®ã®çµéšã§ãã
ãããžã§ã¯ãã§ãªããžããªãã¿ãŒã³ãã©ã®ããã«äœ¿çšããããç¹å®ãããå©ç¹ãšæ¬ ç¹ãéçºå šäœã«ã©ã®ããã«åœ±é¿ããã©ã®ãããªå©çãåŸããããã«ã€ããŠèª¬æããŸãã
ã¯ããã«
ãã®èšäºã¯ããã¶ã€ã³ãã¿ãŒã³ã«ç²Ÿéããã¹ããŒãããã¯ãèªã¿ãããã°ããããã¯ã·ã§ã³ãã«ãã¹ãŠãé©çšããããšããŠããéçºè ã«çŠç¹ãåœãŠãŠããå¯èœæ§ãé«ãããšãããã«èŠåããŸãã ActiveRecordã䜿çšãããã¬ãŒã ã¯ãŒã¯ïŒYiiãLaravelãªã©ïŒã䜿çšããéçºã«ã€ããŠèª¬æããŸããããã¯ãActiveRecordã®ãããã§ã¬ãŒããèžãã§ããŸããŸãªåé¡ã解決ããæ¹æ³ãåŠã³ç¶ããŠããããã§ãã
ãªããžããªãã¿ãŒã³
æåéããç§ã¯ãªããžããªãšã¯äœããæ€èšããããšãææ¡ããŸã ã
ãªããžããªã¯ãç¹å®ã®ã¿ã€ãã®ãšã³ãã£ãã£ã®ã³ã¬ã¯ã·ã§ã³ã¹ãã¬ãŒãžã®æŠå¿µã§ãã
ãã®ãã¿ãŒã³ã«ã€ããŠè©³ããèªãããšãã§ããŸãïŒ
- ãªããžããªãã¿ãŒã³ã åºæ¬ãšèª¬æ
- ãªããžããª
- ãŸããããã°ã©ãã³ã°ã«é¢ããå€ãã®æžç±ïŒMartin Fowler et alãïŒ
äžè¬ã«ãå€ãã®æ å ±ãããããªããžããªãäœã§ããããç解ããããšã¯éåžžã«ãç°¡åãã§ãã
ãªããžããªããå§ãã
äžèŠæš¡ããã³/ãŸãã¯å€§èŠæš¡ïŒè² è·ã®é¢ã§ã¯ãªãã倧èŠæš¡ãªã³ãŒãããŒã¹ãšé·æãµããŒãïŒãããžã§ã¯ããéçºããå ŽåãActiveRecordã®äœ¿çšæã«çºçããæ¬ é¥ãåé¡ã«çŽé¢ããå¯èœæ§ãé«ããªããŸãã äž»ãªãã®ã¯å°ããªãªã¹ãã§åºå¥ã§ããŸãïŒ
- åäžã®è²¬ä»»ã®éåã
- æåã®æ®µèœããããã¢ãã«ãã¯éåžžã«ã倪ã£ãŠãããããšããããŸãã
- åå¿è ã®å ŽåãMVCã®èª€ã£ãæŠå¿µã圢æãããŸããããã§ãMã¯ã¢ãã«ãšããŠç解ãããããã¯== 1ã¯ã©ã¹ãäž»ã«ActiveRecordã§ãã
- äœããã®çç±ã§äžåºŠã«å€æ°ã®ã¬ã³ãŒããåŠçããå¿ èŠãããå ŽåãããŒã¿ã®ã€ã³ããŒã/ãšã¯ã¹ããŒãã®éåžžã«ãªãœãŒã¹éçŽåã®çµç¹ã
- å¿ èŠã«å¿ããŠã«ã¹ã¿ã SQLã¯ãšãªãèšè¿°ããã®ã¯äžäŸ¿ã§ãããçŸå®çã§ã¯ãªãå ŽåããããŸãã
ActiveRecordã«ãåœç¶å©ç¹ããããŸãããããã¯èšäºã®ç¯å²ãè¶ ããŠããããããããã«ã€ããŠã¯èšåããŸããã åæã«ãã²ãšèšã§èšãã°ããActiveRecordã¯é«éãã·ã³ãã«ãç°¡åãã§ãã
ãã®ãããActiveRecordã«åºã¥ãããã¬ãŒã ã¯ãŒã¯ã䜿çšããŠæ°å¹Žéãç§ã¯ã»ãšãã©ãã¹ãŠã®æ¬ ç¹ã«ééããŸããã ãããŠãæ°ãããããžã§ã¯ãã®ã¢ãŒããã¯ãã£ãèšèšãããšãã«ãã©ããããããã¹ããŒããªæ¬ãèšäºãèªãã§ãRepositoryãã¿ãŒã³ãå®è£ ããããšã«ããŸããã
ã·ã³ãã«ãªå®è£ ãšèª¬æã«åºã¥ããŠããã¹ãŠãã·ã³ãã«ã§ããã€ã³ã¿ãŒãã§ã€ã¹ãååŸãããããããã¹ãã¬ãŒãžãããããŒã¿ãååŸãããªããžããªãšãªãã¯ã©ã¹ã«ãã€ã³ãããŸãã ãã¹ãŠãæ£åžžã§ããããã€ã§ãå¥ã®ãªããžããªããã€ã³ãããéžæã¡ãœããã®å®è£ ã眮ãæããããšãã§ããŸããäžè¬ã«ããã¹ãŠãæ確ã§ãã
ã¹ããŒã¿ã¹ãSystems Architectã«å€æŽããŸãã

ããªãã®ããªããžããªãã¯æ¬åœã«ãªããžããªã§ããïŒ
ãããŠãå®è£ ãæ¬åœã«çœ®ãæããå¿ èŠãããç¬éããããŸããã ç§ã¯ç¬é¡ã§èããŠãªãã£ã¹ã«å°çããŸããããã©ãããã°ãã¹ãŠãç°¡åã«å€æŽã§ããŸãããå¥ã®ã¯ã©ã¹ãäœæãããã€ã³ãæã«è¡ãå€æŽããã ãã§ããã
ãã ããæåã®ã±ãŒã¹ã§ã¯ãã¡ã€ã«ãããå¥ã®ã±ãŒã¹ã§ã¯ãµãŒãããŒãã£APIããã®éžæã眮ãæããããšãã¿ã¹ã¯ã§ããã æãäžããŠãã¹ãŠãæŽçãå§ãããšããããªããžããªããã¢ãã«ãè¿ããŠããããšã«æ°ä»ããŸããã ã¯ããããã§ããç§ã®Repositoryãã¿ãŒã³ã¯ããããžã§ã¯ãå šäœãæ©ãç¶ããŠãããã¹ãŠã®åãã¢ãã«ãè¿ããŸãã
ã¯ããã€ã³ã¿ãŒãã§ã€ã¹ã®ãããã§ãå®è£ ãç°¡åã«çœ®ãæããããšãã§ããŸããããè¿ãããããŒã¿ã®åœ¢åŒã¯å€æŽãããŸããã 以åã¯ActiveRecordã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã§ããããä»ã§ã¯ç§ã®ãªããžããªãé åãŸãã¯ã³ã¬ã¯ã·ã§ã³ãè¿ãããšãã§ããŸãã
ããã¯ã©ãããæå³ã§ããïŒ ããã¯ãç§ã®ããŒã ã®ä»£è¡šè ããã¢ãã«ãã®åã ã®ç¹æ§ã䜿çšã§ããããšãæå³ããŸãã ããšãã°ããã¥ãŒããŒã¿ãŒãã¢ã¯ã»ãµãŒããŸãã¯ããžãã¯ã䜿çšããŠã¢ãã«ã«ã¡ãœãããèšè¿°ããã©ãã§ãåŒã³åºãããšãã§ããŸãã ãã®ãããå®è£ ã眮ãæããŠãããŒã¿åœ¢åŒãå€æŽããŸããããçŸåšã¯ã¢ããªã±ãŒã·ã§ã³å šäœãæ£åžžã«æ©èœããããšãä¿èšŒã§ããŸããã ã¢ãã«ã®ç¡å®³ãªã¡ãœãããã©ãããã§ãåŒã³åºãããšããå§ãŸãããã©ãŒã ã§saveïŒïŒãåŒã³åºãããšã§çµãããŸãã 誰ãç¥ããªãã誰ãèŠããŠããªããç¹ã«ãããžã§ã¯ããå»ã£ãæ°äººã®éçºè ãçãæ®ããæ°ãããã®ããããã眮ãæããå Žåã
ãããã¯ãªãããã¹ã
ãã®åŸããã¹ããå®è¡ã§ããããšãæãåºããŸããã ç§ã¯ããŒãããŒã«ç®ãåããããã¹ããæžããŸãããïŒããšå°ããŸããã 次ã«ã圌ã¯å¥ã®ååã«ç®ãåããåãåé¡ãæããã«ããŸããã äžè¬çã«ãå€æããããã«ãã¢ããªã±ãŒã·ã§ã³ã®å€§éšåã¯ãã¹ãã§ã«ããŒãããŠããŸããã§ããã
äœããããŸããïŒ
ãã®ãããæœè±¡åã®è¿œå ã¬ã€ã€ãŒããªãªãŒã¹ããŸãããããã¯ãã¢ãã«ããããžã§ã¯ããæ©ãåã£ãŠæ©ãç¶ããããããã倧ããªå ¥åãããå€ãšã0ã«è¿ãå¹çã®éçºã®ããã®ããå€ãã®æéãå¿ èŠãšããŸãã
ã¹ããŒã¿ã¹ããžã¥ãã¢ã¢ã·ã¹ã¿ã³ãã«å€æŽããŸãã
åé¡ããã詳现ã«ç解ããŸã
ã·ã¹ãã ãããæ·±ãç解ããäŸãèŠãŠã¿ããšãéåžžã«å€ãã®éçºè ããã®ãããªééããç¯ããããã«æªãããšã«æ°ã¥ããŸããã
ããã¯è¯ããªããããããŸãããããªããžããªãã¿ãŒã³ã®å®è£ ã貧匱ã§ããåæ§ã®äŸãæäŸããããšæããŸã ã
ãããã¯ã«é¢ããæ å ±ãèŠããšããã®ã¢ããªã±ãŒã·ã§ã³ãLaravelã§èŠã€ãããŸããã
https://github.com/Bottelet/Flarepoint-crm/
UserRepositoryã®äŸãèŠãŠã¿ãŸãããã
https://github.com/Bottelet/Flarepoint-crm/blob/develop/app/Repositories/User/UserRepository.php
ããã§è§£æãããæ¹æ³ã®1ã€ïŒãã®ãã¹ãŠãæ¶ããå ŽåïŒïŒ
... public function create($requestData) { $settings = Settings::first(); $password = bcrypt($requestData->password); $role = $requestData->roles; $department = $requestData->departments; $companyname = $settings->company; if ($requestData->hasFile('image_path')) { if (!is_dir(public_path(). '/images/'. $companyname)) { mkdir(public_path(). '/images/'. $companyname, 0777, true); } $settings = Settings::findOrFail(1); $file = $requestData->file('image_path'); $destinationPath = public_path(). '/images/'. $companyname; $filename = str_random(8) . '_' . $file->getClientOriginalName() ; $file->move($destinationPath, $filename); $input = array_replace($requestData->all(), ['image_path'=>"$filename", 'password'=>"$password"]); } else { $input = array_replace($requestData->all(), ['password'=>"$password"]); } $user = User::create($input); $user->roles()->attach($role); $user->department()->attach($department); $user->save(); Session::flash('flash_message', 'User successfully added!'); //Snippet in Master.blade.php return $user; } ...
- ãŸããRepositoryã¯ã¹ãã¬ãŒãžã䜿çšããæœè±¡çãªäœæ¥ã§ãã ã€ãŸããäœããåãããäœãã眮ãããšã§ãã ãªããžããªã«ããžãã¯ã¯ãããŸããã
- 第äºã«ããªããžããªå
ã§bcryptãªã©ã䜿çšããããšã¯ã§ããŸãããã¢ããªã±ãŒã·ã§ã³ãèªåã§äœæããå Žåãã³ãã³ããæã£ãŠããå Žåã¯ãããèŠããŠããããã誰ãããªããžããªã«æå·åããããã¹ã¯ãŒããå
¥åãããšããšã©ãŒãæ¢ãå¯èœæ§ããããŸãé·ãéã
- ããã«ãRepositoryã¯æœè±¡ãªããžããªã§ãããããã³ã³ãœãŒã«ã³ãŒã«ã䜿çšããŠäœããä¿åããå¿
èŠããããããSessionãç¥ãããšãã§ããŸããã
- ç¹°ãè¿ããŸãããçµæã¯ãå¶åŸ¡äžèœã«ã¢ããªã±ãŒã·ã§ã³ãããŠã©ãŒã¯ã¹ã«ãŒãããã¢ãã«ã§ãã ActiveRecordã®ãã¹ãŠã®éæ³ã䜿çšããããšããããªããå®ã人ã¯ããŸããã
ã»ãšãã©ã®å Žåããã®ãããªäŸããã詳现ã«åæãããšãããã«å€ãã®èå³æ·±ãããšãèŠã€ãããŸãã
ããã¯ã人ã ããã¿ãŒã³èªäœã«å°éããã®ã§ã¯ãªããã¹ããŒãããã¯ãèªãã§ãªããžããªãããããããªã©ã®å žåçãªäŸã§ã...
ãªããžããªãæ£ãã䜿çšããæ¹æ³ã¯ïŒ
- ãŸããæåã«ããã®èšèšãã¿ãŒã³ãå¿
èŠãªçç±ãæ確ã«ç解ããå¿
èŠããããŸãã
- 第äºã«ããªããžããªã¯ãã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠé§åããããšã³ãã£ãã£ã®ååšãåæãšããŠããŸãã ã€ãŸãããªããžããªã¯ãããŒã¿ãæ ŒçŽããããã®åäžã®åœ¢åŒãåãå
¥ããŠè¿ãå¿
èŠããããŸãã éåžžãããã¯ããžãã¯ã®ãªãã²ãã¿ãŒãšã»ãã¿ãŒãæã€Entityã¯ã©ã¹ã§ãã ããŒã¿ãœãŒã¹ãå€æŽããå Žåãæ»ã圢åŒãå€æŽããªãã§ãã ããã
- ããã«ãActiveRecordã§ãã¬ãŒã ã¯ãŒã¯ã䜿çšãããšããããã99ïŒ
ã®ãªããžããªã¯åé·ã«ãªããŸããActiveRecordèªäœã®äœçœ®ã¯ãRepository / Entity / Presenterã®ç¹å®ã®çµã¿åããã§ãããYii2ã®å Žåã¯ããã£ã«ã¿ãŒãšæ€èšŒããããŸãã ãããã£ãŠããªããžããªå
ã®ActiveRecordå
šäœãæ¬åœã«æ£ç¢ºãã€å¹ççã«ã©ããããã«ã¯ãå°è±¡çãªæœè±¡åå±€ãšã€ã³ãã©ã¹ãã©ã¯ãã£å
šäœãæ§ç¯ããå¿
èŠããããŸãã
- ããã§ãäœããã®çç±ã§YiiãLaravelïŒãŸãã¯åæ§ã®äœãïŒãšãªããžããªãåéã«ããå¿ èŠãããå Žåã Doctrineãããããæè¯ã®éžæè¢ã§ãã Yii2ãšLaravel5ã«ã¯ééããªãæ¡åŒµæ©èœããããŸããã€ãŸãã誰ããåãããšãããŠãããšããããšã§ãã
ãªããžããªãã¿ãŒã³ãŸãã¯ããã«é¡ãããã®ã®å®è£
Laravel5ã®ãªããžããªãã¿ãŒã³ã®å®è£ ã«ã€ããŠèª¬æããŠããèšäºãèŠã€ããŸãã ïŒYii2ã®å Žåãã»ãšãã©åãã§ãïŒã ããããç§ã®å人çãªæèŠã§ã¯ãActiveRecordã䜿çšããŠã¯ãšãªãèšè¿°ããæ§é åãããã¢ãããŒãã«ã€ããŠèª¬æããŠããŸãã äžæ¹ã§ã䟿å©ã§ãã³ãŒãã®éè€ãæžããã¢ãã«ã®ééãæžããã¢ãŒããã¯ãã£ããããšã¬ã¬ã³ãã«ãªããŸãã äžæ¹ããªããžããªã¯ããæœè±¡ãªããžããªããšããŠã®åœ¹å²ãå®å šã«ã¯æãããŠããŸãããã¢ãã«ã䜿ã£ãäœæ¥ãšããã¹ãŠã®éæ³ãåããActiveRecordãžã®å®å šãªãã€ã³ãã£ã³ã°ãé²è¡äžã§ãã
ã¢ãã«ã§äœæ¥ããŠããå ŽåãããŒã¿ãœãŒã¹ãå€æŽãããšãïŒããŒã¿ããŒã¹ãŸãã¯ãã¬ãŒã ã¯ãŒã¯ãå€æŽããå¿ èŠã¯ãããŸãããããµãŒãããŒãã£APIãªã©ã®å¥ã®ãªãœãŒã¹ããããŸãã¯ã¯ãšãªãã«ããŒã䜿çšããŠè€éãªã«ã¹ã¿ã ãªã¯ãšã¹ããäœæããããšã§ãããŒã¿ãååŸããã ãã§ååã§ãïŒ ãããã³æ°ããå®è£ ã¯é åãŸãã¯ã³ã¬ã¯ã·ã§ã³ãè¿ããããã¢ããªã±ãŒã·ã§ã³ã®å®å®ããåäœãä¿èšŒã§ããªãå¯èœæ§ããããŸãã ãã®ãããã¢ãã«ã®ã©ã®ã¡ãœãããã¢ã¯ã»ããµ/ãã¥ãŒããŒã¿ãããã³ãã®ä»ã®é åãã©ãã§äœ¿çšãããã®ãïŒãããžã§ã¯ãã倧ãããèªåã ãã§äœæãããŠããªãå ŽåïŒ

çµè«
ã¢ããªã±ãŒã·ã§ã³ã®èšèšã«ãããŠæçšã§ãããšåæã«èŠãçµéšãââããããšãããç§èªèº«ãå ±æããã次ã®çµè«ã匷調ããããšãã§ããŸãïŒããã¯èª°ãã«åœ¹ç«ã€ãããããŸããïŒã
- ãªããžããªã䜿çšããŠããçç±ãšãå®éã«èšèšãã¿ãŒã³ãæ確ã«ç解ããå¿ èŠããããŸãã å®è£ æ¹æ³ãç¥ã£ãŠããããŸãã¯ç解ããŠããã ãã§ã¯ååã§ã¯ãããŸãããããã䜿çšããçç±ãšæ¬åœã«å¿ èŠãªã®ããç解ããããšã®æ¹ãã¯ããã«éèŠã§ãã
- æ°ããåæ¥ãããžã§ã¯ãã§æ°ããç¿åŸããç¥èãç·Žç¿ããªãã§ãã ããã ç«ãŸãã¯ãããŒã ããããžã§ã¯ãã§ç·Žç¿ããŸãã
- ActiveRecordã䜿çšãããã¬ãŒã ã¯ãŒã¯ã§ãªããžããªãæäœããªãã§ãã ããã ç¹°ãè¿ããŸãããã»ãšãã©äœãããŠããã®ããæ¬åœã«ç¥ã£ãŠããŠããã®çµæãå®å šã«èªèããŠããå Žåãé€ããã»ãšãã©ã®å Žåãåé·ã«ãªããŸãã
- ä»ã®ããŒã«ã衚瀺ããŠèŠéãåºããŠãã ããã 1ã€ã®ãã¬ãŒã ã¯ãŒã¯éçºè ã«ãªããªãã§ãã ãã
- ãã¹ãã¯ããã ããã