Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
EC-CUBE3コードリーディング #4
Search
amidaike
March 02, 2016
Programming
1.3k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
EC-CUBE3コードリーディング #4
amidaike
March 02, 2016
More Decks by amidaike
See All by amidaike
EC-CUBE3勉強会新しいデザインを作成してみよう
amidaike
0
490
EC-CUBE 3.0勉強会
amidaike
1
1k
EC-CUBE3プラグイン勉強会
amidaike
0
490
EC-CUBE3デザイナー向け勉強会 #4
amidaike
0
330
EC-CUBE3コードリーディング #5
amidaike
1
1.6k
EC-CUBE3デザイナー向け勉強会 #1
amidaike
0
310
EC-CUBE3デザイナー向け勉強会 #3
amidaike
1
240
EC-CUBE3デザイナー向け勉強会 #2
amidaike
1
2.9k
EC-CUBE3コードリーディング #3
amidaike
1
980
Other Decks in Programming
See All in Programming
Seven New Principles of Software Engineering
yegor256
0
470
Lambda durable functionsでHuman in the Loopを楽に…楽に……
har1101
2
290
flutter_test のその先へ — Flutter アプリの LLM 機能に「評価」という品質保証を
kosukesaigusa
0
200
動画プレイヤーはなぜカクつくのか 〜Flutterのレンダリングとネイティブの境界を解剖する〜
naruogram
0
330
AI時代のTerminal環境を UNIX哲学で設計・運用する
yasunori0418
1
350
AI時代のIaC入門 〜なぜインフラをコードで管理したいのか?〜 / Introduction to IaC in the AI Era
akihisaikeda
6
1.4k
はじめてのPLATEAU
nokonoko1203
1
610
우리의 Nitro Modules는 당신의 Turbo Modules보다 아름답다
l2hyunwoo
0
260
DroidKnights 2026 Android A2UI Jetpack Compose 기반의 안전한 AI UI 렌더링 - 박제창
itsmedreamwalker
1
200
Materialが消えた日 〜真っ白なFlutterキャンバスにRenderObjectで絵を描く〜
umigishiaoi
0
150
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
220
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
3
1.7k
Featured
See All Featured
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
630
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.7k
Navigating Team Friction
lara
192
16k
Side Projects
sachag
456
43k
Everyday Curiosity
cassininazir
0
390
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
520
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
350
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.7k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
The Curse of the Amulet
leimatthew05
3
17k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Large-scale JavaScript Application Architecture
addyosmani
516
110k
Transcript
EC-CUBE3ίʔυϦʔσΟϯά #4 EC-CUBEؔϢʔβάϧʔϓ 2016-03-02
࣍ 1. Doctrineͷ֓ཁ 2. DoctrineΛͬͨςʔϒϧఆٛ 3. DoctrineΛͬͨDBΞΫηε RepositoryɺfindϝιουɺDQLͷઆ໌ 4. EC-CUBE3ίʔυϦʔσΟϯά
ཧը໘ͷཧ 5. ࣭ٙԠ
1.Doctrineͷ֓ཁ
Doctrineͷ֓ཁ • DoctrineͱPHPͰॻ͔ΕͨO/RϚούʔͰ͢ɻ • ͏গ͠ݫີʹઆ໌͢ΔͱDoctrinePDOΛར༻ͨ͠ҎԼͷओཁͳϥΠϒϥϦͰߏ͞ Ε͓ͯΓɺ૯শͱͯ͠ҰൠతʹO/RϚούʔͱݺΕ͍ͯ·͢ɻ DoctrineCommon : ڞ௨ϥΠϒϥϦ DoctrineDBAL
: ֤DBMSͷࠩΛٵऩ͢ΔϨΠϠʔ DoctrineORM : O/RϚούʔ • ORM(Object Relational Mapping)ͱϓϩάϥϛϯάݴޠͷςΫχοΫͰ͋Γɺσʔλ ϕʔεͱΦϒδΣΫτࢦϓϩάϥϛϯάݴޠͷؒͷඇޓͳσʔλΛม͢Δϓϩά ϥϛϯάٕ๏Ͱ͢ɻMySQLͷσʔλϕʔεͷσʔλΛૢ࡞͍͢͠Α͏ʹ PHP Φϒ δΣΫτʹม͠·͢ɻ • DBAL(Database Abstraction Layer)ͱPDOͷநϨΠϠʔͰɺσʔλϕʔεͱΓऔ Γ͢ΔAPIΛఏڙ͠·͢ɻ
2.DoctrineΛͬͨςʔϒϧఆٛ
DoctrineΛͬͨςʔϒϧఆٛ • ຊདྷσʔλϕʔεͷςʔϒϧΛ࡞͢Δʹcreate tableจͰSQLจΛͬͯ࡞͠· ͕͢ɺDoctrineRuby on Rails༝དྷͷmigrationػೳΛͬͯσʔλϕʔεཧΛ͠· ͢ɻ • ࣮ࡍʹҎԼͷखॱΛͬͯςʔϒϧΛ࡞͠·͢ɻ
1.ϝλσʔλͱݺΕΔઃఆϑΝΠϧ(xxxx.dcm.yml)ʹςʔϒϧΛఆٛ ˠECCUBEROOT/src/Eccube/Resource/doctrine ʹଘࡏ 2.ymlϑΝΠϧʹରԠ͢ΔΤϯςΟςΟΫϥεΛ࡞ ˠECCUBEROOT/src/Eccube/Entity ʹଘࡏ 3.doctrine migrationػೳΛͬͯσʔλϕʔεʹద༻ ˠymlϑΝΠϧͱEntityΛͱʹςʔϒϧ࡞ɺmigration࣌ͷόʔδϣϯཧ༻ςʔ ϒϧ࡞ 4.ςʔϒϧʹมߋ͕ೖΕɺ1ɺ2ɺ3ͷखॱΛ܁Γฦͯ͠σʔλϕʔεʹద༻
ςʔϒϧΛ࡞͠Α͏ • ຊମʹରͯ͠ςʔϒϧΛ࡞͢Δ͜ͱ͋Γ·ͤΜ͕ɺࠓޙ ͷͨΊʹςʔϒϧͷ࡞ํ๏Λઆ໌͓͖ͯ͠·͢ɻ • ςʔϒϧΛ࡞͢ΔͨΊʹඞཁͳϑΝΠϧɺ dcm.ymlϑΝΠϧ (ςʔϒϧఆٛͨ͠ymlϑΝΠϧ) EntityΫϥε (ςʔϒϧΛදͨ͠phpΫϥε)
͕࠷ݶඞཁͱͳΓ·͢ɻ • RepositoryΫϥε (ςʔϒϧʹΞΫηε͢ΔΫϥε)ࠓճ ͋ͬͯͳͯ͘ߏ͍·ͤΜ͕ɺEC-CUBE3Ͱඞͣ࡞͠ ͍ͯ·͢ɻ
ςʔϒϧΛ࡞͠Α͏ • ECCUBEROOT/src/Eccube/Resource/doctrine Լʹ Eccube.Entity.Study.dcm.yml ϑΝΠϧΛ࡞͠·͢ɻ • dcm.ymlϑΝΠϧΛ࡞ޙɺEntityΫϥεΛdoctrineί ϚϯυΛͬͯ࡞͠·͢ɻ(શͯ1ߦͰهड़) vendor/bin/doctrine
orm:generate:entities --extend="Eccube \\Entity\\AbstractEntity" src
ςʔϒϧΛ࡞͠Α͏ • Eccube.Entity.Study.dcm.ymlͷ༰ Eccube\Entity\Study: type: entity table: dtb_study repositoryClass: Eccube\Repository\StudyRepository
id: id: type: integer nullable: false id: true column: study_id generator: strategy: AUTO options: unsigned: true fields: name: type: string length: 100 url: type: string nullable: true length: 200 create_date: type: datetime nullable: false update_date: type: datetime nullable: false lifecycleCallbacks: { }
ςʔϒϧΛ࡞͠Α͏ • EntityΫϥεΛ࡞ޙɺ࣮ࡍʹMySQLPostgresʹରͯ͠ςʔϒϧ Λ࡞͠·͢ɻ࡞ํ๏2௨Γ͋ΓɺmigrationͱݺΕΔ ΈΛ͏͔ɺdoctrineίϚϯυΛͬͯςʔϒϧΛ࡞͢Δ͔ͷ2 ௨Γ͋Γ·͢ɻࠓճ͕࣌ؒͳ͍ͨΊdoctrineίϚϯυΛ͏ํ๏ Λઆ໌͠·͢ɻ
ɾDBͷϚΠάϨʔγϣϯํ๏ vendor/bin/doctrine orm:schema-tool:update Λ࣮ߦͯ͠migrationՄೳ͔Ͳ͏͔Λ֬ೝ͢Δɻ vendor/bin/doctrine orm:schema-tool:update --dump-sql Λ࣮ߦͯ͠sqlΛ֬ೝ vendor/bin/doctrine orm:schema-tool:update --force Λ࣮ߦͯ͠DBϚΠάϨʔγϣϯ
3.DoctrineΛͬͨDBΞΫηε
DoctrineΛͬͨDBΞΫηε • DBʹΞΫηε͢ΔͨΊʹRepositoryͱݺΕΔΫϥεΛ͍·͢ɻ • RepositoryಛఆͷΫϥεͷΤϯςΟςΟͷݕࡧΛิॿ͢ΔͨΊ͚ͩͷ PHPΫϥεͰ͢ɻࢦఆ͞ΕͨΤϯςΟςΟΛऔಘ͢ΔͨΊʹRepository Λ͍·͢ɻ • ymlϑΝΠϧʹrepositoryClass: Eccube\Repository\XXXXRepositoriͱ
هड़͠ͳ͚ΕσϑΥϧτͰDoctrine\ORM\EntityRepositoryΫϥε ͕ར༻͞Ε·͢ɻ Eccube\Entity\Product: type: entity table: dtb_product repositoryClass: Eccube\Repository\ProductRepository ← ͜ΕͰ͢
DoctrineΛͬͨDBΞΫηε • EC-CUBE3ͰRepositoryΤϯςΟςΟΫϥεຖʹରԠ͢Δ RepositoryΫϥεΛ༻ҙ͠ɺͦͷRepository Doctrine\ORM\EntityRepositoryΫϥεΛܧঝͯ͠࡞͠·͢ɻ • RepositoryΛݺͼग़͢ͱ͖ɺ $app['orm.em']->getRepository('Eccube\Entity\XXXX') ͱ͢Δ͜ͱͰRepositoryΛݺͼग़͠ɺRepositoryΫϥε͕༻ҙ͍ͯ͠Δ ϝιουͰDBʹΞΫηε͠·͢ɻ
• EC-CUBE3ͰRepositoryΫϥεશͯ$appʹDI͍ͯ͠·͢ɻ (ECCUBEROOT/src/Eccube/ServiceProvider/ EccubeServiceProvider.phpΛࢀর)
DoctrineΛͬͨDBΞΫηε • EntityRepositoryΫϥεʹඪ४Ͱ༻ҙ͞Ε͍ͯΔศརͳϝ ιου͕͋Γ·͢ɻΑ͘͏ϝιουʹҎԼͷͷ͕͋Γ ·͢ɻ find : ओΩʔΛݩʹݕࡧ݁ՌΛऔಘ findAll :
શ݅औಘ findBy : ͋Δ݅Λݩʹݕࡧ findOneBy : ͋Δ݅Λݩʹݕࡧ͢Δ͕݁Ռ1݅ͷΈ • ͬͱෳࡶͳ͕݅ඞཁͳ߹ɺ֤RepositoryΫϥεʹϝ ιουΛՃ͍ͯͩ͘͠͞ɻ
DoctrineΛͬͨDBΞΫηε • findϝιου ݕࡧ݁ՌओΩʔʹ֘͢Δ1݅ͷΈͰɺRepositiryʹ ؔ͢ΔEntityΫϥε͕औಘͰ͖·͢ɻ $Product = $app['eccube.repository.product'] ->find($id);
DoctrineΛͬͨDBΞΫηε • findAllϝιου ݕࡧ݁Ռશ݅औಘ͞ΕɺEntityΫϥεͷྻ(array)͕ औಘͰ͖·͢ɻ $Products = $app['eccube.repository.product'] ->findAll();
DoctrineΛͬͨDBΞΫηε • findByϝιου ࢦఆͨ͠ݕࡧ݅Λݩʹݕࡧ͠ɺ֘͢Δ݅ͷEntity Ϋϥεͷྻ(array)͕औಘͰ͖·͢ɻ $Products = $app['eccube.repository.product'] ->findBy( array(
'name' => 'hoge', 'xxxx' => 'yyyyy' ) );
DoctrineΛͬͨDBΞΫηε • findOneByϝιου ࢦఆͨ͠ݕࡧ݅Λݩʹݕࡧ͠ɺ֘͢Δ݅ͷEntity Ϋϥε1݅ͷΈ͕औಘͰ͖·͢ɻ $Product = $app['eccube.repository.product'] ->findOneBy( array(
'name' => 'hoge', 'xxxx' => 'yyyyy' ) );
DoctrineΛͬͨDBΞΫηε • ιʔτ݅ findByɺfindOneByϝιουݕࡧ݅ࢦఆҎ֎ʹιʔ τ݅ࢦఆͰ͖·͢ɻ $Products = $app['eccube.repository.product'] ->findBy( array('name'
=> 'hoge'), array('update_date' => 'DESC') );
DoctrineΛͬͨDBΞΫηε • RepositoryΫϥεʹ༻ҙ͞Ε͍ͯΔfindϝιουͳͲΛ͑جຊతͳΫΤϦͰ ͋Ε؆୯ʹDB͔ΒΛऔಘ͢Δ͜ͱ͕ग़དྷ·͕ͨ͠ɺΑΓෳࡶͳΫΤϦѻ ͏͜ͱ͕Ͱ͖·͢ɻ • ΑΓෳࡶͳΫΤϦΛѻ͏߹ɺDQL(Doctrine Query Language) Λ༻ͯ͠ॻ͘
͜ͱՄೳͰ͢ɻDQLSQLͱࣅ͍ͯ·͕͢ɺςʔϒϧ(ྫ: product)ͷߦͰͳ ͯ͘ɺ1ͭҎ্ͷΤϯςΟςΟΫϥεΦϒδΣΫτ(ྫ: Product)ʹରͯ͠ΫΤϦ ͢Δͱ͍͏͜ͱΛఆ͠·͢ɻ • DoctrineͰΫΤϦ͢Δʹ2ͭͷબࢶ͕͋Γ·͢ɻ७ਮͳDoctrineΫΤϦΛॻ ͔͘ɺDoctrineͷQueryBuilderΛ༻͢Δ͜ͱͰ͢ɻ http://docs.symfony.gr.jp/symfony2/book/doctrine.html#book-doctrine-queries
DoctrineΛͬͨDBΞΫηε • DoctrineΫΤϦSQLจʹඇৗʹΑ͘ࣅͨ༰Ͱهड़͢ Δ͜ͱ͕ՄೳͰ͢ɻ • SQLʹ׳Ε͍ͯͨ߹ɺDoctrineΫΤϦΛ͙͑͢ʹ ѻ͏͜ͱ͕ՄೳͰ͢ɻ • DoctrineͷQueryBuilderΛ͑ɺΦϒδΣΫτࢦ ͳΠϯλʔϑΣʔεΛͬͯهड़͢Δ͜ͱ͕ՄೳͰ͢ɻ
• QueryBuilderΦϒδΣΫτɺΫΤϦΛΈཱͯΔͷ ʹඞཁͳϝιουશͯΛؚΜͰ͍·͢
DoctrineΛͬͨDBΞΫηε • DoctrineΫΤϦͷྫ DoctrineΫΤϦΛ͏ͱ΄΅SQLͱಉ༷ͷ༰Ͱهड़͕ ग़དྷ·͢ɻ $query = $app['eccube.repository.product'] ->createQuery( 'SELECT
p FROM Eccube\Entity\Product p WHERE p.name = :name ORDER BY p.update_date DESC' ) ->setParameter('name', 'hoge'); $Products = $query->getResult();
DoctrineΛͬͨDBΞΫηε • QueryBuilderͷྫ QueryBuilderΛ͏ͱɺෳࡶͳ݅Λهड़͢Δ͜ͱ͕ ՄೳͰɺΫΤϦͰΈཱͯΔͷʹඞཁͳϝιου (whereɺorderByɺetc...)͕શͯ͋Γ·͢ɻ $query = $app['eccube.repository.product'] ->createQueryBuilder('p')
->where('p.name = :name') ->orderBy('p.update_date', 'DESC'); ->setParameter('name', 'hoge') ->getQuery(); $Products = $query->getResult();
4.EC-CUBE3ίʔυϦʔσΟϯά
EC-CUBE3ίʔυϦʔσΟϯά • AdminσΟϨΫτϦԼʹཧը໘༻ίϯτϩʔ ϥʔ͕ଘࡏ σΟϨΫτϦ໊ ػೳ໊ AdminController ϩάΠϯը໘ɺཧը໘τοϓ Content ίϯςϯπཧ༻
Customer ձһཧ༻ Order डཧ༻ Product ཧ༻ Setting جຊใઃఆɺγεςϜใઃఆ༻ Store ΦʔφʔζετΞ༻
EC-CUBE3ίʔυϦʔσΟϯά • Admin\Product\ProductController.phpͷίʔυϦʔσ Οϯά
5.࣭ٙԠ
։ൃ࣌ͷࢀߟϖʔδ • GitHubWiki https://github.com/EC-CUBE/ec-cube/wiki • GitHubPages http://ec-cube.github.io • Qiitaͷهࣄ http://qiita.com/tags/EC-CUBE3