ããã«ã¡ã¯ãhabralyudiã

OnPHPã¯ããæ³åã®ãšãããPHPã§æžããããã¬ãŒã ã¯ãŒã¯ã§ãã åæ§ã®ããŒã«ãšåæ§ã«ãç¬èªã®é·æãšçæããããç§ã®æèŠã§ã¯ãããå€ãã®ããŒã«ããããŸãã
å¥åŠãªããšã«ãããã§ã¯ããã®ãã¬ãŒã ã¯ãŒã¯å°çšã®ãããã¯ã¯1ã€ãèŠã€ãããŸããã§ããã ã©ããããã®çç±ã¯ããã¬ãŒã ã¯ãŒã¯ã«ããã¥ã¡ã³ããŒã·ã§ã³ãå®å
šã«æ¬ ããŠãããããããã¬ãŒã ã¯ãŒã¯èªäœãããã³ãç¬èªã®ããã¬ãŒã ã¯ãŒã¯ã«äŒŒãŠããããã§ãã ãã ããããã¯å®å
šã«çå®ã§ã¯ãããŸããããåŸã§è©³ãã説æããŸãã
ãã®èšäºã®ç®çã¯ããã®ãã¬ãŒã ã¯ãŒã¯ã«é¢ããæ¢åã®ç¥èãšãã®äœ¿çšçµéšãçµåããã ãã§ãªããæ¬åœã«äŸ¡å€ã®ããéçºã«å°é家ã³ãã¥ããã£ã®æ³šæãåŒãããšã§ãã ããããå°æ¥çã«ã¯ãåéãããè³æãããå°ãªããšãäœããã®ããã¥ã¡ã³ããç·šéããããšãå¯èœã«ãªãã®ã§ãå
±æããæ
å ±ã«æè¬ããŸãã
ç§ã¯ãã¬ãŒã ã¯ãŒã¯ã®äœæè
ã§ã¯ãªãããšã«æ³šæããŠãã ãããããããç§ã¯ãã®ãŠãŒã¶ãŒã§ãããããã«ã€ããŠããã«åŠã³ãããšæã£ãŠããŸãã ããã§ã¯å§ããŸãããã
ã¯ããã«
ãã®ãã¬ãŒã ã¯ãŒã¯ã¯ã2005幎以æ¥ãç§ãç解ããŠããããã«ããããäœæããç¬èªã®ããŒãºã«åãããŠéçºãã人ã
ã®ããŒã ã§çãŸããæé·ããŸããã å
¬éãããŠããæãå€ãããŒãžã§ã³ã¯ã2005幎9æ3æ¥ä»ã®ããŒãžã§ã³0.2ã§ãã ãã以æ¥ããã¬ãŒã ã¯ãŒã¯ã¯å€§ããå€åããæ°ããæ©èœãè¿œå ããããã°ãä¿®æ£ãããŸããã çŸåšãonPHPã¯ãããããèŠæš¡ã®Webãããžã§ã¯ãã®åºç€ã«ãµããããåè£ã§ãã ææ°ã®å®å®ããŒãžã§ã³ã¯1.0ã§ãã
é·æãšçæã
å
ã»ã©èšã£ãããã«ãã©ã®ããŒã«ïŒãšãããããåçŽã«ïŒã«ã¯ããããé·æãšçæããããonPHPãäŸå€ã§ã¯ãããŸããã
å©ç¹ã®äžã§
ãç§ã¯ä»¥äžãåºå¥ããããšãã§ããŸããã
1.è¿
éãªã¢ããªã±ãŒã·ã§ã³éçºã
OnPHPããŒã«ã䜿çšãããšãå¿
èŠãªã¯ã©ã¹ãšãããã®é¢ä¿ããã°ããäœæããããŒã¿ããŒã¹æ§é ãæ§ç¯ããŠäŸåé¢ä¿ã確èªã§ããŸãã ããã¯ãã¹ãŠããããžã§ã¯ãã®æ¬è³ªãèšè¿°ããXML圢åŒã®ã¹ããŒãã䜿çšããŠè¡ãããŸãã 詳现ã«ã€ããŠã¯ã以äžãã芧ãã ããã ããã«ãããŒã¿ã«ã¢ã¯ã»ã¹ããããã®äŸ¿å©ãªããŒã«ããããŸãïŒCriteriaïŒHibernateããã®ããèããããããŒãïŒãšOSQLã
2.æ°Žå¹³æ¹åã®ã¹ã±ãŒã©ããªãã£ã
ãã£ãã·ã³ã°ã®åé¡ã¯æ·±ã解決ãããŠããŸãã ç§ãç解ããŠããããã«ãããã¯ãã¬ãŒã ã¯ãŒã¯ã®èªãã§ãã ããŸããŸãªæ¹æ³ã§éåžžã«ã¹ããŒãã«ãã£ãã·ã¥ã§ããŸãïŒãã¡ã€ã«ã·ã¹ãã ãmemcachedãªã©ïŒã ããã«ãããŒã¿ããŒã¹å±€ã¯è€æ°ã®æ¥ç¶ã§ã®äœæ¥ããµããŒãããååµå·ãšã³ãã£ãã£ã¯äœ¿çšããæ¥ç¶ãæå®ã§ããŸãã å®éã«ããŒã¿ãç°ãªãããŒã¿ããŒã¹ã«ééçã«ä¿åããŸãã
3.æè»æ§ã
ããã¯ãã»ãšãã©ã®å Žåããã¬ãŒã ã¯ãŒã¯ããããžã§ã¯ãã«æ©èœãäœæããããã®ç¹å®ã®ã¢ã¯ã·ã§ã³ãã³ãã¬ãŒãã課ããªããšããäºå®ã«ãããŸãã åæã«ããã¬ãŒã ã¯ãŒã¯ã¯ãå¿
èŠãªãã®ãäœæããããã«å¿
èŠãªãã¹ãŠã®æ©èœãæäŸããŸãã ãã¬ãŒã ã¯ãŒã¯ã®ã¢ãŒããã¯ãã£ã¯ãå€ãã®æåãªãã¶ã€ã³ãã¿ãŒã³ã䜿çšãããã¬ãŒã ã¯ãŒã¯èªäœã¯ãç¬èªã®ã¯ã©ã¹ïŒStaticFactoryãSingletonïŒããé ããæ©èœãæäŸããŸãã
4.ã¹ããŒãã
ç§ãç解ããŠããããã«ãããã¯äž»ã«éåžžã«æè»ãªãã£ãã·ã³ã°ã«ãã£ãŠéæãããŸãã ããããå¥ã®èŠå ããããŸã-ãããã«ä»å±ããŠããphpçšã®ã¢ãžã¥ãŒã«ã åžžã«å¿
èŠãšãããã¯ã©ã¹ã®äžéšã¯ã¢ãžã¥ãŒã«ãšããŠèšèšãããŠãããééããªãäœæ¥ãå éããŸããã
5.å質ãšä¿¡é Œæ§ã
ã³ãŒãã¯åäœãã¹ãã§ã«ããŒãããŠããŸãã ãã¬ãŒã ã¯ãŒã¯ã«è¡šç€ºãããåæ°æ©èœã¯ããã¹ãã§ã«ããŒãããŠããŸãã 䜿çšã®çµéšãããæ§ç¯ãããã·ã¹ãã ã®åäœã®å®å®æ§ãšäºæž¬å¯èœæ§ã«åãã§é©ããŸããã
6.é«å質ã§ã¯ãªãŒã³ã§æ確ãªã³ãŒãã
ããããããã¯äž»èŠ³çãªãã®ã§ãããããã¯ç§ã®æèŠã§ãããæããã«ã¯ãªãšã€ã¿ãŒãããã§ãã ããã«æ
£ããå³æ Œãª
ã³ãŒãã£ã³ã°sleleã¯ãã³ãŒãã®çŽ æ©ãèªèã«è²¢ç®ããã³ãŒãå
ã®ã³ãŒããèŠããã³ã«çããç¹å®ã®çŸçåã³ããã
ãããããŸãã
ãããããã¹ãŠã®ã¡ãªããã
æ¬ ç¹ ïŒ
1.ããã¥ã¡ã³ãã®æ¬ åŠã
ãã¬ãŒã ã¯ãŒã¯ã®äœæè
ã¯ãAPIãæé«ã®ããã¥ã¡ã³ãã§ãããšä¿¡ããŠããŸãã å人çã«ã¯ãç§ã¯ãããã«åæããªãã®ã§ãè°è«ãšãã®åŸã®ã¡ã¢ã®éã«ãå°ãªããšãäœããã®ããã¥ã¡ã³ããçãŸããããšãæåŸ
ããŠããã®ã¡ã¢ãæžãããšã«ããŸããã
2.å°ââããªã³ãã¥ããã£ã
ãã®æ¬ ç¹ã¯æåã®çµæã§ãããªããªããããã¥ã¡ã³ããäžè¶³ããŠããããã«ãšã³ããªã®ãããå€ã倧å¹
ã«å¢å ããå€ãã®äººãæ¶ãããã£ãŠããããã§ãã 質åãææ¡ã®è°è«ã¯ãäž»
ã«ã¡ãŒãªã³ã°ãªã¹ããéããŠè¡ãããŸã
ãã¡ãŒãªã³ã°ãªã¹ãã§ã¯ãæã«1ã2åè°è«ãè¡ãããŸãã
3.ã¯ã©ã¹ã®ç«¶åã
ãã¬ãŒã ã¯ãŒã¯ã®ã¯ã©ã¹ã«ã¯ãã¬ãã£ãã¯ã¹ããªãããããããžã§ã¯ãããã®ãã¬ãŒã ã¯ãŒã¯ã«ç§»è¡ãããšãã«åé¡ãçºçããŸãã ãã®ãããonPHPã§ååã䜿çšãããŠããã¯ã©ã¹ã«å¯ŸããŠä»ã®ååãäœæããå¿
èŠãããå ŽåããããŸãã
ã©ãããå§ããŸããïŒ
git masterãã©ã³ãã«ã¯ããããžã§ã¯ãã®å
žåçãªæ§é ããšã³ããªãã€ã³ãïŒindex.phpïŒãããŒã¿ããŒã¹ã®äœ¿çšããã©ãŒã ã®äœ¿çšïŒå
¥åããŒã¿ãåä¿¡ããã³æ€èšŒããããã®åŒ·åãªããŒã«ïŒããã³äžå®å
šãªã¡ã¢ã«é¢ããæšå¥šäºé
ããã
éåžžã«çããã¥ãŒããªã¢ã«ããããŸããŸã ã€ã³ãã¥ããŒã¿ãŒã«ããACLã
ã€ã³ãã¥ããŒã¿ãŒã
ããã¯onPHPã®äžéšã§ãããæçµçãªãã©ãŒã ããŸã æ£åŒã«ååŸããŠããªããã¬ãŒã ã¯ãŒã¯ã®éšåããããå€æŽãæ©èœã®ç Žæããã®ä»ã®äžå®ãçããå¯èœæ§ããããŸãã éçºããããã°ããã¹ãã¯æ¬¡ã®ãšããã§ãã ãã¬ãŒã ã¯ãŒã¯ã®æ°ããéšåã¯ã€ã³ãã¥ããŒã¿ãŒã§éçºãããå®å®åãããåŸãã¡ã€ã³ã»ã¯ã·ã§ã³ã«ãªããŸãã
ãã®ãããçŸæç¹ã®
ã€ã³ãã¥ããŒã¿ãŒã«ã¯ãAclãTsearchïŒPostgreSQLã®å
šææ€çŽ¢ïŒãFormRenderingïŒãã©ãŒã ã®éäžè¡šç€º-Formãªããžã§ã¯ããšãã®ããªããã£ãïŒãApplicationïŒã¢ããªã±ãŒã·ã§ã³ãšäŸ¿å©ãªæ§æã®ããã®èšå®ã®çµã¿åããïŒãããã«ããã€ãã®ããã±ãŒãžããããŸãã
ã¡ã¿ã
ã¡ã¿ãã©ã«ããŒã«ãããã¬ãŒã ã¯ãŒã¯ã®ãã®éšåã¯ããšã³ãã£ãã£ãšãã®ããããã£ãèšè¿°ããå°æ¥ã®ã¢ããªã±ãŒã·ã§ã³ã«å¿
èŠãªã¯ã©ã¹ãäœæããæ©äŒãæäŸããŸãã ã¹ããŒã ã¯XML圢åŒã§å®è¡ãããæ·»ä»ã®
meta.dtdã䜿çšããŠæ€èšŒã§ããŸãã
åè·¯äŸïŒ
<ïŒxml version = "1.0"ïŒ>
<ïŒDOCTYPEã¡ã¿æ§æã·ã¹ãã "meta.dtd">
<ã¡ã¿æ§æ>
<ã¯ã©ã¹>
<ã¯ã©ã¹å= "èè
"ããŒãã«= "èè
">
<ããããã£>
<èå¥å/>
<ããããã£å= "åå"ã¿ã€ã= "æåå"ãµã€ãº= "50"å¿
èŠ= "true" />
</ properties>
<ãã¿ãŒã³å= "StraightMapping" />
</ class>
<ã¯ã©ã¹å= "Book"ããŒãã«= "books">
<ããããã£>
<èå¥å/>
<ããããã£å= "ã¿ã€ãã«"ã¿ã€ã= "æåå"ãµã€ãº= "50"å¿
é = "true" />
<ããããã£å= "èè
"ã¿ã€ã= "èè
"ãªã¬ãŒã·ã§ã³= "OneToOne"å¿
é = "true"ãã§ãã= "lazy" />
</ properties>
<ãã¿ãŒã³å= "StraightMapping" />
</ class>
</ classes>
</ã¡ã¿æ§æ>
ããã§é¢çœãã®ã¯ïŒ
-ãšã³ãã£ãã£ããšã«ãææããããããã£ãšãã®ã¿ã€ãã瀺ãããŸãã ããã«åºã¥ããŠãã¡ã¿ãã«ããŒã¯ããŒã¿ããŒã¹ã¹ããŒãã«ã©ã®ãããªå€æŽãå ããå¿
èŠãããããæšå¥šããããã䜿çšããŠãã©ãŒã å
ã®ãããã®ãªããžã§ã¯ããæ€èšŒããããšãã§ããŸãã
-ãšã³ãã£ãã£éã®é¢ä¿ãããã«ç€ºãããšãã§ããçæãããã¯ã©ã¹ã«åæ ãããŸãã OneToOneãOneToManyãManyToManyã䜿çšã§ããŸãã ãã®ãããç§ã¯åžžã«OneToOneæ¥ç¶ã䜿çšããŠããŸããããä»ã®çš®é¡ã®æ¥ç¶ã«ã€ããŠç¥ããããšæããŸãïŒçè«ã§ã¯ãªããããã¯å€§äžå€«ãã€ãŸãonPHPã®å®è£
ã§ãïŒã
-ãã¿ãŒã³-ã¯ãå°æ¥ã®ã¯ã©ã¹ã®ãã¿ãŒã³ã§ãã æ®å¿µãªããããã¹ãŠã®ãã³ãã¬ãŒãã®æ©èœã¯ããããŸãããããã®äžéšã次ã«ç€ºããŸãã
- StraightMapping-ååããããããããŒã¿ããŒã¹ããŒãã«ã®1ã€ã®ã¬ã³ãŒããžã®ãªããžã§ã¯ãã®çŽæ¥ãããã³ã°ã§ããããšã¯æããã§ãã ããã¯ActiveRecord M. Fowlerã«ä»ãªããŸããã
- EnumerationClassã¯åæã§ãã ããŒã¿ããŒã¹ã«ããŒãã«ã¯ãªãããç·åœ¢ãªã¹ãïŒid => nameïŒã§ããã¯ã©ã¹ã å€æŽãããªãããŸãã¯ã»ãšãã©å€æŽãããªãããŒã¿ã«äœ¿çšãããŸãïŒããšãã°ãæãæ座ãªã©ïŒ
- AbstractClass-æœè±¡ã¯ã©ã¹ã ä»ã®ã¯ã©ã¹ãåãã¹ããŒã ã§ç¶æ¿ãããã¹ããŒã ã®æœè±¡ã¯ã©ã¹ãå®çŸ©ããããã«äœ¿çšãããŸãã
æ®ãã®ãã¿ãŒã³ïŒ
DictionaryClassãSpookedClassãSpookedEnumerationãValueObjectãããã³InternalClass ïŒã¯ãŸã äžæã§ãããç¥ã£ãŠãã人ãæããŠãããããšãæã¿ãæžãçããŠãããŸãã
-fetch =â lazyâ-ããã¯ããªããžã§ã¯ããã¢ã»ã³ãã«ãããšãã«ãAuthorããããã£ãã¢ã¯ã»ã¹ããåã«ããŒãããå¿
èŠããªãããšã瀺ããŠããŸãã äžèšã®äŸã§ãIDã§Bookãªããžã§ã¯ããã¢ã³ããŒããããšïŒ
$book = Book::dao()->getById(1);
$author = $book->getAuthor();
次ã«ãAuthorãªããžã§ã¯ããæ§ç¯ããããã«ãããŒã¿ããŒã¹ã§èŠæ±ãè¡ããããã©ã¡ãŒã¿ãŒã®å€ãååŸãããŸãã fetch = "cascade"ã䜿çšãããšããã¹ãŠã®ãªã³ã¯ã®ãã¹ãŠã®ããŒã¿ã1ã€ã®èŠæ±ã§ããŒã¿ããŒã¹ããåé€ããããã®åŸãé¢é£ãããªããžã§ã¯ããåéãããè¿œå ã®èŠæ±ãªãã§äœ¿çšã§ããŸãã
ããã§ãã¹ãŠã®ã¡ã¿ãã§ããããã§ã¯ãããŸããããç°¡åã«æŠèŠã説æã§ããŸãã ã¯ã©ã¹ã®çæãå§ããŸãããã
ã³ãŒãçæã
ã¡ã¿ãã©ã«ããŒã«ã¯
bin / build.phpã¹ã¯ãªããããããè¿ãã«ããã¯ã©ã¹ã䜿çšããŠãåè·¯ãã¯ã©ã¹ã«å€æããŸãã 䜿ãæ¹ãèŠãŠã¿ãŸãããïŒ
Usage: build.php [options] [project-configuration-file.inc.php] [metaconfiguration.xml]
ã¡ã¿ã¯ãããŸãããæ§æãã¡ã€ã«ã¯ãããŸã-ãããã äœæããŸãããã
ã«ãŒãã«ã¯ãæ§æãã¡ã€ã«ã®ãã³ãã¬ãŒãã§ãã
global.inc.php.tplãã¡ã€ã«ããããŸãã 次ã®ããã«ã³ããŒããŠå€æŽããŸãã
aïŒå®æ°
PATH_CLASSESãè¿œå ããŸã-çæãããã¯ã©ã¹ãããå Žæã
bïŒset_include_pathïŒïŒã«è¿œå ããŸãïŒ
.PATH_CLASSES.PATH_SEPARATOR
.PATH_CLASSES.'Auto'.PATH_SEPARATOR
.PATH_CLASSES.'Auto'.DIRECTORY_SEPARATOR.'Business'.PATH_SEPARATOR
.PATH_CLASSES.'Auto'.DIRECTORY_SEPARATOR.'DAOs'.PATH_SEPARATOR
.PATH_CLASSES.'Auto'.DIRECTORY_SEPARATOR.'Proto'.PATH_SEPARATOR
.PATH_CLASSES.'Business'.PATH_SEPARATOR
.PATH_CLASSES.'DAOs'.PATH_SEPARATOR
.PATH_CLASSES.'Proto'.PATH_SEPARATOR
cïŒããŒã¿ããŒã¹æ¥ç¶ãã©ã¡ãŒã¿ãŒãè¿œå ããŸãã
DBPool::me()->setDefault(
DB::spawn('PgSQL', 'user', 'password', 'localhost', 'dbname')
->setEncoding('utf-8')
);
次ã«ã
build.phpãå®è¡ã
ãŸã ã
$ ./meta/bin/build.php ./global.inc.php ./schema/project.xml
onPHP-1.1ïŒMetaConfigurationãã«ããŒã
æ¢ç¥ã®å
éšã¯ã©ã¹ïŒRangeãDateRangeãTimestampRangeãIdentifiableObjectãIdentifiableTreeãNamedObjectãNamedTreeãããã ãã§ãã
ã¯ã©ã¹ãæ§ç¯ããïŒ
èè
ïŒ
AutoProtoAuthorïŒã¯ã©ã¹/èªå/ããã/ AutoProtoAuthor.class.phpïŒ
ProtoAuthorïŒã¯ã©ã¹/ Proto / ProtoAuthor.class.phpïŒ
AutoAuthorïŒã¯ã©ã¹/èªå/ããžãã¹/ AutoAuthor.class.phpïŒ
èè
ïŒã¯ã©ã¹/ããžãã¹/ Author.class.phpïŒ
AutoAuthorDAOïŒã¯ã©ã¹/èªå/ DAO / AutoAuthorDAO.class.phpïŒ
AuthorDAOïŒã¯ã©ã¹/ DAO / AuthorDAO.class.phpïŒ
æ¬ïŒ
AutoProtoBookïŒã¯ã©ã¹/èªå/ããã/ AutoProtoBook.class.phpïŒ
ProtoBookïŒã¯ã©ã¹/ Proto / ProtoBook.class.phpïŒ
AutoBookïŒã¯ã©ã¹/èªå/ããžãã¹/ AutoBook.class.phpïŒ
ããã¯ïŒã¯ã©ã¹/ããžãã¹/ Book.class.phpïŒ
AutoBookDAOïŒã¯ã©ã¹/èªå/ DAO / AutoBookDAO.class.phpïŒ
BookDAOïŒã¯ã©ã¹/ DAO / BookDAO.class.phpïŒ
ã³ã³ããã®æ§ç¯ïŒ
DBã¹ããŒãã®æ§ç¯ïŒ
schema.phpïŒã¯ã©ã¹/èªå/ schema.phpïŒ
æšå¥šãããDBã¹ããŒãã®å€æŽïŒ
ããŒãã« 'authors'ãèŠã€ãããŸãããã¹ãããããŸãã
ããŒãã«ãæ¬ããèŠã€ãããŸãããã¹ãããããŸãã
å€ããã¡ã€ã«ã®ç¢ºèªïŒ
ãã¹ãŠã®æ¢ç¥ã®ã¯ã©ã¹ãã³ã³ãã€ã«ããããšããŸãã...å®äºããŸããã
çæããããã¡ã€ã«ã®å¥å
šæ§ã®ç¢ºèªïŒ
èè
ïŒ2/1 /
ãšã©ãŒïŒ42P01ïŒãªã¬ãŒã·ã§ã³ "authors"ã¯ååšããŸãã-SELECT "authors"ã "Id"ã "authors"ã "Name" FROM "authors" WHEREïŒ "authors"ã "Id" IS NOT NULLïŒORDER BY "authors" ã "id" LIMIT 1
[äŸå€ãã¬ãŒã¹ã®åãæã]
äœãèµ·ãã£ãã®ãïŒãã«ããŒã¯æ§æãã¡ã€ã«ãååŸããã¹ããŒã ïŒã¯ã©ã¹ã®æ§ç¯ã»ã¯ã·ã§ã³ïŒã«åŸã£ãŠã¯ã©ã¹ãäœæããã¹ããŒããã¡ã€ã«ïŒDBã¹ããŒãæ§ç¯ã»ã¯ã·ã§ã³ïŒãäœæããå€ããã¡ã€ã«ããã§ãã¯ãããã¹ãŠã®ãããžã§ã¯ããã¡ã€ã«ã®æ§æããã§ãã¯ããçæãããã¯ã©ã¹ã®æ£ç¢ºæ§ããã§ãã¯ããŠããŸã ããŒãã«ãäœæããŠããŸããã ä¿®æ£ããŸãã ããŒã¹ã«ç§»åããŠã2ã€ã®ãªã¯ãšã¹ããå®è¡ããŸãã
CREATE TABLE authors (id serial PRIMARY KEY);
CREATE TABLE books (id serial PRIMARY KEY);
build.phpãå床å®è¡ããŸãã
$ ./meta/bin/build.php ./global.inc.php ./schema/project.xml
onPHP-1.1ïŒMetaConfigurationãã«ããŒã
æ¢ç¥ã®å
éšã¯ã©ã¹ïŒRangeãDateRangeãTimestampRangeãIdentifiableObjectãIdentifiableTreeãNamedObjectãNamedTreeãããã ãã§ãã
ã¯ã©ã¹ãæ§ç¯ããïŒ
èè
ïŒ
AutoProtoAuthor
AutoAuthor
AutoAuthorDAO
æ¬ïŒ
AutoProtoBook
ãªãŒãããã¯
AutoBookDAO
ã³ã³ããã®æ§ç¯ïŒ
DBã¹ããŒãã®æ§ç¯ïŒ
schema.php
æšå¥šãããDBã¹ããŒãã®å€æŽïŒ
ALTER TABLE "authors" ALTER COLUMN "id" TYPE BIGINT;
ALTER TABLE "authors" ADD COLUMN "name" CHARACTER VARYINGïŒ50ïŒNOT NULL;
ALTER TABLE "books" ALTER COLUMN "id" TYPE BIGINT;
ALTER TABLE "books" ADD COLUMN "title" CHARACTER VARYINGïŒ50ïŒNOT NULL;
ALTER TABLE "books" ADD COLUMN "author_id" BIGINT NOT NULL REFERENCES "authors"ïŒ "id"ïŒON DELETE RESTRICT ON UPDATE CASCADE;
CREATE INDEX "author_id_idx" ON "books"ïŒ "author_id"ïŒ;
å€ããã¡ã€ã«ã®ç¢ºèªïŒ
ãã¹ãŠã®æ¢ç¥ã®ã¯ã©ã¹ãã³ã³ãã€ã«ããããšããŸãã...å®äºããŸããã
çæããããã¡ã€ã«ã®å¥å
šæ§ã®ç¢ºèªïŒ
èè
ïŒ2/1 / F / C / H / TïŒãæ¬ïŒ3/1 /
ãšã©ãŒïŒ42703ïŒåbooks.titleã¯ååšããŸãã-SELECT "books"ã "Id"ã "books"ã "Title"ã "books"ã "Author_id" FROM "books" WHEREïŒ "books"ã "Id" IS NOT NULLïŒORDER BY "books"ã "Id" LIMIT 1
æšå¥šãããDBã¹ããŒãã®å€æŽã«æ³šæããŠããããã®ã¯ãšãªãå®è¡ãã
build.phpãå床å®è¡ããŸãã
$ ./meta/bin/build.php ./global.inc.php ./schema/project.xml
onPHP-1.1ïŒMetaConfigurationãã«ããŒã
æ¢ç¥ã®å
éšã¯ã©ã¹ïŒRangeãDateRangeãTimestampRangeãIdentifiableObjectãIdentifiableTreeãNamedObjectãNamedTreeãããã ãã§ãã
ã¯ã©ã¹ãæ§ç¯ããïŒ
èè
ïŒ
AutoProtoAuthor
AutoAuthor
AutoAuthorDAO
æ¬ïŒ
AutoProtoBook
ãªãŒãããã¯
AutoBookDAO
ã³ã³ããã®æ§ç¯ïŒ
DBã¹ããŒãã®æ§ç¯ïŒ
schema.php
æšå¥šãããDBã¹ããŒãã®å€æŽïŒ
å€ããã¡ã€ã«ã®ç¢ºèªïŒ
ãã¹ãŠã®æ¢ç¥ã®ã¯ã©ã¹ãã³ã³ãã€ã«ããããšããŸãã...å®äºããŸããã
çæããããã¡ã€ã«ã®å¥å
šæ§ã®ç¢ºèªïŒ
èè
ïŒ2/1 / F / C / H / TïŒãããã¯ïŒ3/1 / F / C / H / TïŒãå®äºã
ãã¹ãŠã®ã¯ã©ã¹ãçæãããŸãã ããããèŠãŠã¿ãŸãããã
PATH_CLASSESå®æ°ã§æå®ããããã£ã¬ã¯ããªã«ã¯ã4ã€ã®ãµããã£ã¬ã¯ããªãå«ãŸããããã«ãªããŸããã
- Auto ïŒbuild.phpãå®è¡ããããã³ã«åçæãããå€æŽäžå¯èœãªã¯ã©ã¹ãå«ãã¯ã©ã¹ã
- ããžãã¹ ïŒå¿
èŠãªããžãã¯ãè£ããå€æŽã§ããããžãã¹ãªããžã§ã¯ããšå€æŽããããžãã¹ãªããžã§ã¯ãã
- DAO ïŒããŒã¿ã¢ã¯ã»ã¹ãªããžã§ã¯ããé »ç¹ã«äœ¿çšãããµã³ãã«ãé
眮ã§ããããŒã¿ã¢ã¯ã»ã¹ãªããžã§ã¯ãã
- Proto ïŒãªããžã§ã¯ãã®ãããã¿ã€ããšãã®ããããã£ãèšè¿°ããã¯ã©ã¹ã
äœæãããã¯ã©ã¹ã®äœ¿çšäŸã
ã³ãŒãïŒ
require "global.inc.php";
DBPool::me()->getLink()->begin();
$author = Author::create()
->setName('Martin Fowler');
Author::dao()->add($author);
$book = Book::create()
->setTitle('Patterns of Enterprise Application Architecture')
->setAuthor($author);
Book::dao()->add($book);
DBPool::me()->getLink()->commit();
çµæïŒ
dbname => select * from authors;
id | ãåå
---- + ---------------
1 | ããŒãã£ã³ã»ãã¡ãŠã©ãŒ
ïŒ1è¡ïŒ
dbname => select * from books;
id | ã¿ã€ãã«| author_id
---- + --------------------------------------------- ---- + -----------
1 | ãšã³ã¿ãŒãã©ã€ãºã¢ããªã±ãŒã·ã§ã³ã¢ãŒããã¯ãã£ã®ãã¿ãŒã³| 1
ïŒ1è¡ïŒ
次åã¯onPHPã®MVCãšæ¬æ Œçãªãµã³ãã«ã¢ããªã±ãŒã·ã§ã³ã«ã€ããŠæžãã質åãããå
容ã匷調ããäºå®ã§ãã PHPã«é¢ãããããã¯ãããã®èšäºã«å¯Ÿããã³ã¡ã³ãã®åœ¢ã§ååãã§å»ºèšçãªå¿çãèŠã€ããããšãé¡ã£ãŠããŸãã
ãæž
èŽããããšãããããŸããã
UPD ïŒ
åç
§ïŒ
-onphp.org
-GIT-onPHPã®äœæè
ã®1人ã§ãã
Denis Gabaidulinã®ããã°