
èªè
ã®çãããããã«ã¡ã¯ïŒ
èšäºãèªãã§ãããªããšäœãããŸãã
- åçŽãªãšã³ãã£ãã£ãäœæãã
- ORMã¢ãããŒã·ã§ã³ã«ã€ããŠå°ã話ããŸããã
- é¢é£ä»ããå®çŸããŸãã
- 1察1ã®åæ¹åéä¿¡
- 1察å€ã®åæ¹åéä¿¡
- åæ¹åã®å€å¯Ÿå€éä¿¡
- ååž°æ¥ç¶
- ãã£ã¯ã¹ãã£ã䜿çšããŠãããã®ãšã³ãã£ãã£ãè©ŠããŠã¿ãŸããã
èšäºã«èå³ããã人ïŒ
èªè
ã¯ããã§ã«Symfonyã«ç²ŸéããŠããå Žåã«èå³ããããŸã-å°ãªããšã1ã€ã®åçŽãªãããžã§ã¯ãããã§ã«å®äºããŠããŸãã é«åºŠãªéçºè
ã®éã§ãã®æ
å ±ã«é¢å¿ãããããæãã«ãæ©ãããšãã§ããŸããã å®éããã®èšäºã¯ç§ãšäžç·ã«åããŠãã人ãã¡ã®ãããã質åã«å¯ŸããçããšããŠæžãããŠããŸãã ä»ãç§ã¯åœŒãã«ãã®èšäºãžã®ãªã³ã¯ãæããããšãã§ããŸãã
ãšã³ãã£ãã£äœæ
Composerãã·ã¹ãã ã«ã€ã³ã¹ããŒã«ãããŠããªããã®ããã«ããã¹ãŠã®ã³ã³ãœãŒã«ã³ãã³ããèšè¿°ããŸããSymfonyãèµ·åããããã«ã€ã³ã¹ããŒã«ããŸãïŒ
誰ããæ
£ããŠããŸãããèªåã§å€ãã®ã³ãŒããæžãã®ã¯å¥œãã§ã¯ãããŸããã Symfonyã§äœãã®èªåçæã䜿çšã§ããå Žåãããã䜿çšããã¢ããã€ã¹ããŸããããã¯äººçèŠå ã®æå°åã§ãããããªãã®å¿ã解æŸããã ãã§ãã Symfonyã³ã³ãœãŒã«ã³ãã³ãã䜿çšããŠ2ã€ã®åçŽãªãšã³ãã£ãã£ãçæããŸãã
ãã®çµæã2ã€ã®ãšã³ãã£ãã£ã¯ã©ã¹ãäœæããŸããã
- src / AppBundle / Entity / Product.php
- src / AppBundle / Entity / User.php
ãããŠã察å¿ãããšã³ãã£ãã£ã®ãªããžããªã®2ã€ã®ã¯ã©ã¹ïŒ
- src / AppBundle / Repository / ProductRepository.php
- src / AppBundle / Repository / UserRepository.php
ãããã®ãšã³ãã£ãã£ã®ããŒã¿ããŒã¹æ§é ã®äœæã«é²ãåã«ããšã³ãã£ãã£èªäœãæ€èšããŸãã ã€ãŸãããããã®æ³šéã ç§ã®èªè
ã®ã»ãšãã©ã¯ãã§ã«ãã®ãããã¯ãããç解ããŠãããšæããŸãããããã§ããããã€ãã®ç¹ã説æããŸãã
çæçŽåŸã®ãšã³ãã£ãã£src / AppBundle / Entity / Product.phpïŒ
ããŒã¿ããŒã¹æ§é ãäœæããããã«äœæãããSQLã¯ãšãªã確èªããŸãã
php bin/console doctrine:schema:create --dump-sql CREATE TABLE user (id INT AUTO_INCREMENT NOT NULL, username VARCHAR(127) NOT NULL, password VARCHAR(127) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB; CREATE TABLE product (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(127) NOT NULL, description LONGTEXT NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
ãšã³ãã£ãã£çæã®çµæãéå°ãªæ³šéãäœæããããã®æ®µéã§æ³šéããªãã·ã§ã³ã«æžãããšããšã³ãã£ãã£ã¯ãŸã£ããåãåäœãããŸãã
ãã©ãã·ã¥ããŒãžã§ã³
ããŒã¿ããŒã¹æ§é ãäœæããããã«äœæãããSQLã¯ãšãªã確èªãããŸã£ããåãçµæã確èªããŸãã
php bin/console doctrine:schema:create --dump-sql CREATE TABLE user (id INT AUTO_INCREMENT NOT NULL, username VARCHAR(127) NOT NULL, password VARCHAR(127) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB; CREATE TABLE product (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(127) NOT NULL, description LONGTEXT NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
ãã®ãããªäŸãåŒçšãããšããç§ã¯äœã«æ³šæãåèµ·ãããã§ããïŒ å§åç
ã»ãšãã©ã®å Žåããšã³ãã£ãã£ãã¢ãã«ãšããŠäœ¿çšããŠããŒã¿ããŒã¹æ§é ãèªåçã«äœæããŸãã ãã®ãšã³ãã£ãã£ã®ããŒãã«ã«ååãä»ããæ¹æ³ãšåãã£ãŒã«ãã«ååãä»ããæ¹æ³ãæ瀺çã«ç€ºãã泚éã®ãã¹ãŠã®éšåãåé€ããŸããã ãã®æ§æããŒã¿ã¯ãæ¢åã®ããŒã¿ããŒã¹ã䜿çšããŠããå Žåã«ã®ã¿å¿
èŠã§ãããå¶ç¶ã«ãããã£ãŒã«ãåãæ¬è³ªçã«ããããã£ã®ååã«å¯Ÿå¿ããŠããŸããã ããããæå®ããªãå ŽåãDoctrineã¯ãšã³ãã£ãã£ã¯ã©ã¹ã®ååã«åŸã£ãŠããŒãã«ã«ååãä»ãããšã³ãã£ãã£ã®ããããã£ã®ååã«åŸã£ãŠãã£ãŒã«ãã«ååãä»ããŸãã ãããŠãããã¯æ£ããã¢ãããŒãã§ãããªããªããããŒã¿ããŒã¹ã®ãã£ãŒã«ãã®ååã¯ãšã³ãã£ãã£ã®ããããã£ãšäžèŽããŠãããããã«åœ±é¿ãåãŒããããããé©ããããããšãã§ãããµãŒãããŒãã£ã¯ååšããªãããã§ãã
ããããããªãã¯æœè±¡åã®ã¬ãã«ã倱ããåãšã³ãã£ãã£ã®ãªãã¡ã¯ã¿ãªã³ã°ã§ããŒã¿ããŒã¹æ§é ãæŽæ°ããå¿
èŠããããšèšãã§ãããã ããã«å¯Ÿããçãã¯æ¬¡ã®ãšããã§ãããããããªãã¡ã¯ã¿ãªã³ã°ã®çµæãšããŠããšã³ãã£ãã£ã®ããããã£ã®ååãšããŒã¿ããŒã¹å
ã®ãã£ãŒã«ããšã®éã®äžæ£ç¢ºãªççŸ
ã¯ããããžã§ã¯ãã®æè¡çè² åµã®è²¯éç®±ã®äœåãªãã€ã³ãã§ãã
ç§ã¯ç¶æ³ãèªåŒµããŸãïŒæ°å¹ŽåŸããããžã§ã¯ããäžçèŠæš¡ã«æé·ããéå°ãªè² è·ã«å¯ŸåŠããããã«ãµãŒããŒã®ã¯ã©ãŠãå
šäœã®ããŒã¿ããŒã¹ããã§ã«æçš¿ããŠããå ŽåãããŒã¿ããŒã¹ã«ãthis_may_workããšããååãšãidããšããååã®ããŒãã«ãèŠã€ããããšãã§ããŸãããfooãããbarãããsome_field_2ãã ååãæ¯èŒãããæ¬è³ªã«ãããŠããæ·±ãæå³ãæã€ãšããæ£åœåã¯éèŠã§ã¯ãããŸããã
ããŒã¿ããŒã¹æ§é ã®çæãéå§ããŸãã
php bin/console doctrine:schema:create
ããã§ãããŒã¿ããŒã¹ã«äœæãããããŒãã«ã«ãããããã2ã€ã®ãšã³ãã£ãã£ãã§ããŸããã ã€ã³ã¹ã¿ã³ã¹ãäœæããããŒã¿ããŒã¹ã«ä¿åããŠãããããŒã¿ããŒã¹ããéžæã§ããŸãã ãã®èšäºã§ãšã³ãã£ãã£ã€ã³ã¹ã¿ã³ã¹ã®äœæãå®èšŒããããã«ããã£ã¯ã¹ãã£ã䜿çšããããšã«ãããšã³ãã£ãã£ãªããžããªã®ã¡ãœããã§ã®éžæãå®èšŒããŸãã ãšã³ãã£ãã£ãªããžããªã¯æ¢ã«ãããŸããããã£ã¯ã¹ãã£ããŒã¿ãæäœããã¡ã«ããºã ã¯ãŸã ãããŸããã
ãã£ã¯ã¹ãã£ãã€ã³ã¹ããŒã«ãã
doctrine / doctrine-fixtures-bundleäŸåé¢ä¿ããããžã§ã¯ãã«ãã©ãã°ããŸãïŒ
php composer.phar require --dev doctrine/doctrine-fixtures-bundle
Symfonyã³ã¢ã®äŸåé¢ä¿ãã³ãã«ãæ¥ç¶ããŸãã
ããã§ãã£ã¯ã¹ãã£ãäœæããæºåãæŽããŸããã ãããã®ãã£ã¬ã¯ããªãäœæããŸãã
mkdir -p src/AppBundle/DataFixtures/ORM
ãã£ã¯ã¹ãã£ããŒã¿ã®åæãã¥ãŒïŒ
src / AppBundle / DataFixtures / ORM / LoadCommonData.php <?php namespace AppBundle\DataFixtures\ORM; use AppBundle\Entity\Product; use AppBundle\Entity\User; use Doctrine\Common\DataFixtures\FixtureInterface; use Doctrine\Common\Persistence\ObjectManager; class LoadCommonData implements FixtureInterface { public function load(ObjectManager $manager) { $user = new User(); $user ->setPassword('some_password') ->setUsername(''); $manager->persist($user); $product = new Product(); $product ->setName(' ') ->setDescription(' . .'); $manager->persist($product); $manager->flush(); } }
ãã®ã³ãã³ãã§ããã®ãã£ã¯ã¹ãã£ããŒã¿ãããŒã¿ããŒã¹ã«ããŒãã§ããŸãã
php bin/console doctrine:fixtures:load
1察1ã®åæ¹åéä¿¡
äžèšã§ã¯ã2ã€ã®ç¡é¢ä¿ãªãšã³ãã£ãã£ãæã€ã¢ããªã±ãŒã·ã§ã³ãååŸããŸããã ããã¯ãæ¬è³ªçã«ããã®ã¢ããªã±ãŒã·ã§ã³ãå®å
šã«ç¡æå³ã«ããŸãã å®éã®ã¢ããªã±ãŒã·ã§ã³ã®ããŒã¿ã®ã»ãšãã©ã¯ãäœããã®åœ¢ã§ä»ã®ããŒã¿ã«é¢é£ããŠããŸãã ãœãŒã·ã£ã«ãããã¯ãŒã¯ã®ããŒãžäžã®ãã¹ãŠã®ã³ã¡ã³ãã¯ããŠãŒã¶ãŒã®æ¬è³ªã«é¢é£ä»ããããŠããŸããããã§ãªããã°ã圹ã«ç«ããªããªããŸãã
1察1ã®é¢ä¿-å€å¯Ÿå€ã®é¢ä¿ãããããããžã§ã¯ãã§ã®é »åºŠã¯ããã«äœããšæããŠããŸãã
éåžžã®åœ¢åŒã«åŸãå Žåãããã¯èªç¶ãªããšã§ãã ãã ãããã®å®è£
æ¹æ³ãç¥ãå¿
èŠããããŸãã
ããšãã°ã売ãæãšã³ãã£ãã£ã»ã©ãŒãäœæããŸãããã®ãŠãŒã¶ãŒã売ãæã§ããå Žåããšã³ãã£ãã£ãŠãŒã¶ãŒãš1察1ã§ãªã³ã¯ãããŸãã
php bin/console doctrine:generate:entity --entity=AppBundle:Seller --fields="company:string(127) contacts:text" -q
次ã«ããŠãŒã¶ãŒãšã³ãã£ãã£ãå€æŽããŠã売ãæãšã³ãã£ãã£ãšã®æ¥ç¶ãäœæããŸãã
src / AppBundle / Entity / User.php 販売è
ã®æ¬è³ªãå€æŽããŠããŠãŒã¶ãŒãšã³ãã£ãã£ãšã®é¢ä¿ãè¿œå ããŸãã
src / AppBundle / Entity / Seller.php ããã«
åæ¹åéä¿¡ã®äŸãæããããšã«æ³šæããŠãã ãã...åæ¹åéä¿¡ãè¡ãçç±ã¯ãŸã£ãããããŸããã åæ¹åéä¿¡ã¯ããŒã¿ããŒã¹ãå€æŽããŸããããããã°ã©ã ã³ãŒãã§ã¯éåžžã«äŸ¿å©ã§ãã ç§ã®æèŠã§ã¯ãé床ã®æé©åãšRAMã®äœ¿çšã®èŠ³ç¹ãããã䞻芳çãªæèŠã¯å¯èœã§ãããåæ¹åéä¿¡ã§ã¯äœãåŸãããŸããã ïŒå
責äºé
ïŒååž°éä¿¡ã«ã€ããŠèª¬æããŠããèšäºã®æåŸã®ã»ã¯ã·ã§ã³ã§ã¯ãåæ¹åéä¿¡ã®å¯äžã®æåäŸãç¥ãããŠããŸããïŒ
ãŸã
ã泚éãçç¥ããããšã«ã泚æããŠãã ããã ä»åã¯ã¢ãããŒã·ã§ã³@JoinColumnã ãããã®æ³šéã¯ã以åã«åé€ãã泚éãå¿
èŠã ã£ãã®ãšãŸã£ããåãç®çã§å¿
èŠã§ããããŒã¿ããŒã¹ã§ãã£ãŒã«ããäœæããååãšãå€éšããŒãäœæããããã«ããŒã¿ããŒã¹ã®ãã£ãŒã«ãã䜿çšããååã瀺ããŸãã ããã¯ãã¹ãŠããã®æ³šéãªãã§å¯èœãªéãæè¯ã®æ¹æ³ã§å®è¡ãããŸãã
ãã³ãã«ã®ãã¹ãŠã®ãšã³ãã£ãã£ã§ã²ãã¿ãŒ/ã»ãã¿ãŒã¡ãœããã®èªåçæãéå§ããŸãã ãããã®ã¡ãœããã¯ãæ°ãããšã³ãã£ãã£ããããã£çšã«äœæãããŸãã
php bin/console doctrine:generate:entities AppBundle
ãŸããããŒã¿ããŒã¹æ§é ããšã³ãã£ãã£ãšäžèŽãããå¿
èŠããããŸãã
php bin/console doctrine:schema:update --force
ããŒã¿ããŒã¹å
ã«å€±ããããªãããŒã¿ãããå Žåã¯ãæåŸã®ã³ãã³ãã泚æããŠäœ¿çšããŠãã ããã å®åãµãŒããŒã§ã¯ããã®ã³ãã³ãããŸã£ãã䜿çšããªãã§ãã ããã
移è¡ããŒã¿ããŒã¹ãšã¯äœã§ããïŒ
ããŠããã£ã¯ã¹ãã£ã§ã¯ã売ãæã®ãšãã»ã³ã¹ã«æ¢ã«æ¥ç¶ããŠãããã1人ã®ãŠãŒã¶ãŒãäœæããŸãã
src / AppBundle / DataFixtures / ORM / LoadCommonData.php <?php namespace AppBundle\DataFixtures\ORM; use AppBundle\Entity\Product; use AppBundle\Entity\Seller; use AppBundle\Entity\User; use Doctrine\Common\DataFixtures\FixtureInterface; use Doctrine\Common\Persistence\ObjectManager; class LoadCommonData implements FixtureInterface { public function load(ObjectManager $manager) { $user = new User(); $user ->setPassword('some_password') ->setUsername(''); $manager->persist($user); $seller = new Seller(); $seller ->setCompany(" ") ->setContacts(" "); $manager->persist($seller); $seller_user = new User(); $seller_user ->setPassword('some_password') ->setUsername('') ->setSeller($seller); $manager->persist($seller_user); $product = new Product(); $product ->setName(' ') ->setDescription(' . .'); $manager->persist($product); $manager->flush(); } }
ãã£ã¯ã¹ãã£ããŒã¿ã®ããŒããéå§ããããŒã¿ããŒã¹ã§äœæãããã¬ã³ãŒããè³è³ã§ããŸãã
ãããã®æ³šéããšã³ãã£ãã£éã®é¢ä¿ãäœæããæ¹æ³ãç解ããã®ã«åé¡ããããDoctrine 2ã®å
¬åŒããã¥ã¡ã³ãã圹ã«ç«ããªãå Žåã¯ãç»åãèŠãŠãã ããïŒ

ããã§ãç¢å°ã¯æ³šéã«å
¥åããããã«ã©ãããæ¥ããã瀺ããŸãã
äž¡æ¹ã®ãšã³ãã£ãã£ã®æ³šéã¯éåžžã«é¡äŒŒããŠããããšã«æ³šæããŠãã ããã æ§æçã«ã¯ã
mappedBy å±æ§ãš
inversedBy å±æ§ã®ã¿ãç°ãªã
ãŸã ã ãããããã®éãã¯åºæ¬ã§ãã éåžžãinversedByå±æ§ãååšãããšã³ãã£ãã£ã¯ãmappedByå±æ§ãæã€åŸå±ãšã³ãã£ãã£ãšèŠãªãããŸãã Userãšã³ãã£ãã£ã¯ãSellerãšã³ãã£ãã£ã«åŸå±ããŠããããšãããããŸãã ããã¯ãããŒã¿ããŒã¹ã§ã¯ãã»ã©ãŒããŒãã«ãžã®å€éšããŒãå«ããŠãŒã¶ãŒããŒãã«ã§ããããã®éã§ã¯ãªããšããäºå®ã«è¡šããŠããŸãã ããã¯ããã£ã¯ã¹ãã£ããŒã¿ã§èšè¿°ããã³ãŒãã«ã圱é¿ããŸãã売ãæã§ã¯ãªããsetSellerã¡ãœããã䜿çšããŠå£²ãæããŠãŒã¶ãŒã«å²ãåœãŠãããšã«æ³šæããŠãã ããã åŸè
ã®ãªãã·ã§ã³ã¯ãããŒã¿ããŒã¹ã«ãŸã£ãã衚瀺ãããŸããã ã€ãŸããé¢é£ä»ããããŠããçžæãšç€ºãããŠããã®ã¯ãäžäœãšã³ãã£ãã£ã®ãªããžã§ã¯ãã§ããããšãç解ããå¿
èŠããããŸãã
1察å€ã®åæ¹åéä¿¡
ã³ãã¥ãã±ãŒã·ã§ã³ã®æãäžè¬çãªåœ¢åŒã ãããã£ãŠãç±åž¯ã®å³¶ã
ã®ã©ããã«ã€ã³ã¿ãŒãããããªããã³ã³ãã¥ãŒã¿ãŒããæããé ããªãã«æŽçªãéä¿¡ããã·ã¹ãã ãæ£ãã°ã£ãŠããªãäžæ¯ç¶æ
ã§ãããããå®çŸã§ããå¿
èŠããããŸãã äžè¬ã«ãããªãã®ååšãã®ãã®ã§ã1察å€ã®é¢ä¿ãSymfonyãããžã§ã¯ãã«æã¡èŸŒãå¿
èŠããããŸãã
äžèšã®ãšãããåæ¹åéä¿¡ã®äŸãäœæããŸãã ãããè¡ãã«ã¯ãæ¢åã®ãšã³ãã£ãã£ã§ããProductãšSellerãæ¥ç¶ããŸãã
ç§ãã¡ã¯ãã®è³ªåã«çããŸããã ãããã®é¢ä¿ã«å€ãåå ãã誰ãäžäººã«ãªãã®ãã éåžžã1人ã®å£²ãæããå€ãã®è£œåãåºãããŸãã ãããã£ãŠãæ°ããSellerãšã³ãã£ãã£ããããã£ã«ã¯
@ORM\OneToMany
ããããProductãšã³ãã£ãã£ããããã£ã«ã¯
@ORM\ManyToOne
ãŸãã ãã以å€ã®å Žåããã¹ãŠã¯1察1æ¥ç¶ã¿ã€ããšåãã§ãã ãã ããããã§ã¯ããå€ãã®ãåŽã®ãšã³ãã£ãã£ã¯åžžã«ã1ãåŽã®ãšã³ãã£ãã£ã«åŸå±ãããããå±æ§mappedByãšinversedByãèªç±ã«äº€æããããšã¯ã§ããŸããã ãããã£ãŠã補åã®ã¿ãåžžã«ããŒã¿ããŒã¹ã«å€éšããŒãæã¡ãŸãã ããžãã¯ã®ç¶ç¶ïŒäžäœãšã³ãã£ãã£ãšããŠã®ååã«å¯ŸããŠã売ãæã¯setSellerã¡ãœããã«ãã£ãŠå²ãåœãŠãããŸãããã®ã¡ãœããã¯ããã®äºå®ãããŒã¿ããŒã¹ã«ä¿åãããããã«ä»¥äžã«èšè¿°ããŸãã
販売è
ã®ãšãã»ã³ã¹ãå€æŽããŠã補åã®ãšãã»ã³ã¹ãšã®é¢ä¿ãäœæããŸãã
src / AppBundle / Entity / Seller.php 補åã®ãšãã»ã³ã¹ãå€æŽãã売ãæã®ãšãã»ã³ã¹ãšã®é¢ä¿ãè¿œå ããŸãã
src / AppBundle / Entity / Product.php ç¹°ãè¿ããŸããããã³ãã«ã®ãã¹ãŠã®ãšã³ãã£ãã£ã§ã²ãã¿ãŒ/ã»ãã¿ãŒã¡ãœããã®èªåçæãéå§ããŸãã
ãŸããããŒã¿ããŒã¹æ§é ãå床æŽæ°ããã³ãã³ããå®è¡ããŸãã ïŒããŒã ãèŠããŠããªãå Žåã¯äžèšãåç
§ïŒã
ãã£ã¯ã¹ãã£ããŒã¿ã§æ¢ã«äœæãããŠãã補åã«å£²ãæãå²ãåœãŠãŸãã
ãã£ã¯ã¹ãã£ããŒã¿ã®ããŒããéå§ãããšãããŒã¿ããŒã¹ã§ã補åã¬ã³ãŒããPillow for the ProgrammerããSeller_idãã£ãŒã«ãã®å€ãååŸãããšããäºå®ã«æå¿ããããšãã§ããŸãã ãããç§ãã¡ãæ±ããŠãããã®ã§ããçŸåšãåœç€Ÿã®è£œåã§ã¯ãå売ãæãå€ãã®ååãææã§ããŸãã
ã³ã³ãããŒã©ãŒã®ã¢ã¯ã·ã§ã³ããã§ãã¯ã€ã³ããã³ãŒãïŒ
6ã¯ãå·çæç¹ã§ã®è£œåã®IDã§ãïŒãã£ã¯ã¹ãã£ããŒã¿ã®ããŒããéå§ãããšãããŒã¿ããŒã¹ããŒãã«ã®å€ãã¬ã³ãŒãã¯åé€ãããŸãããäž»ããŒã®èªåã€ã³ã¯ãªã¡ã³ãã¯ãªã»ãããããŸããïŒã ããã§ã¯ããã©ã€ããªããŒïŒidãã£ãŒã«ãïŒã®å€ã«ãã£ãŠãªããžããªãã補åãååŸããgetSellerã¡ãœããã䜿çšããŠè£œåã«é¢é£ä»ããããã»ã©ãŒãšã³ãã£ãã£ãååŸããŸããã åºåã¯æ¬¡ã®ãšããã§ãã
ãè§ãšã²ã¥ãã
次ã«ã売ãæã®ãã¹ãŠã®è£œåãæ¢ããŠã¿ãŸãããã äŸãšããŠãã³ã³ãããŒã©ãŒã®ã¢ã¯ã·ã§ã³ã®ã³ãŒãïŒ
ãã³ãæ©èœã®åºåïŒ
array:1 [âŒ
0 => " "
]
ç§ã«é¢ããŠã¯ãçµæã¯éæãããŸããã
åæ¹åã®å€å¯Ÿå€éä¿¡
ãã®ãããªé¢ä¿ãã©ã®ããã«æ§æãããŠããããç¥ãããšã¯éåžžã«åœ¹ç«ã¡ãŸããã1察å€ã®é¢ä¿ã»ã©äžè¬çã§ã¯ãããŸããã ããŒã¿ããŒã¹å
ã®å€å¯Ÿå€ã®ãªã¬ãŒã·ã§ã³ã·ããã¯ã3çªç®ã®ããããããŒãã«ã䜿çšããŠ2ã€ã®ããŒãã«ããªã³ã¯ããããšã§æ§æãããŠããããšãæ¢ã«ç¥ã£ãŠããã¯ãã§ãã ãã®3çªç®ã®ããŒãã«ã®æ¬è³ªã¯äœæããå¿
èŠã¯ãããŸãã-ããŒã¿ããŒã¹æ§é ãäœæãŸãã¯æŽæ°ããã³ãã³ããå®è¡ãããšãDoctrineã¯ãã®ããŒãã«ãåå¥ã«äœæããŸãã
åºå€§ãªãããžã§ã¯ãã§ã¯ãCategoryãšã³ãã£ãã£ãäœæãããã®å€å¯Ÿå€ã®é¢ä¿ãProductã«é¢é£ä»ããŸãã ãããã£ãŠã1ã€ã®è£œåãäžåºŠã«è€æ°ã®ã«ããŽãªã«å±ããââæ©äŒãäœæããŸãã ããã§ã®ãå€å¯Ÿå€ãé¢ä¿ã¯ç°¡åã«æããã«ãªããŸããå€ãã®è£œåã1ã€ã®ã«ããŽãªã«å±ãã1ã€ã®è£œåãå€ãã®ã«ããŽãªã«å±ããââããšãã§ããŸãã補ååŽãã«ããŽãªåŽã«ã¯ãå€ãèšå·ããããå€å¯Ÿå€ã®é¢ä¿ãå¿
èŠã§ãã
ã«ããŽãªãšã³ãã£ãã£ãäœæããŸãã
php bin/console doctrine:generate:entity --entity=AppBundle:Category --fields="name:string(127)" -q
ã«ããŽãªãŒã®æ¬è³ªãå€æŽããŠã補åã®æ¬è³ªãšã®é¢ä¿ãäœæããŸãã
src / AppBundle / Entity / Category.php 補åã®æ¬è³ªãå€æŽããã«ããŽãªãŒã®æ¬è³ªãšã®é¢ä¿ãè¿œå ããŸãã
src / AppBundle / Entity / Product.php ãã³ãã«ã®ãã¹ãŠã®ãšã³ãã£ãã£ã§ã²ãã¿ãŒ/ã»ãã¿ãŒã¡ãœããã®èªåçæãéå§ããŸãã ãŸããããŒã¿ããŒã¹æ§é ãå床æŽæ°ããã³ãã³ããå®è¡ããŸãã ïŒããŒã ãèŠããŠããªãå Žåã¯äžèšãåç
§ïŒã
ãã£ã¯ã¹ãã£ã¯2ã€ã®ã«ããŽãªã®äœæã«ãã£ãŠè£å®ãããŸããå¥ã®è£œåãäœæãã補åã«ã«ããŽãªãå²ãåœãŠãŸãã ãã¹ãŠã®è£œåããã¹ãŠã®ã«ããŽãªã«ããããšãå€æããŸããã ç¥ã¯ç§ãã¡ã«ããŒã±ãã£ã³ã°ãèš±ããŠãããŸããããããã¯æ確ã«ããããã ãã«è¡ãããŸããã
src / AppBundle / DataFixtures / ORM / LoadCommonData.php <?php namespace AppBundle\DataFixtures\ORM; use AppBundle\Entity\Category; use AppBundle\Entity\Product; use AppBundle\Entity\Seller; use AppBundle\Entity\User; use Doctrine\Common\DataFixtures\FixtureInterface; use Doctrine\Common\Persistence\ObjectManager; class LoadCommonData implements FixtureInterface { public function load(ObjectManager $manager) { $user = new User(); $user ->setPassword('some_password') ->setUsername(''); $manager->persist($user); $seller = new Seller(); $seller ->setCompany(" ") ->setContacts(" "); $manager->persist($seller); $seller_user = new User(); $seller_user ->setPassword('some_password') ->setUsername('') ->setSeller($seller); $manager->persist($seller_user); $category = new Category(); $category->setName(''); $manager->persist($category); $category2 = new Category(); $category2->setName(''); $manager->persist($category2); $product = new Product(); $product ->setSeller($seller) ->setName(' ') ->setDescription(' . .'); $manager->persist($product); $product2 = new Product(); $product2 ->setSeller($seller) ->setName(' ') ->setDescription(', 64 , - 64 , 16 '); $manager->persist($product2); $product->addCategory($category); $product->addCategory($category2); $product2->addCategory($category); $product2->addCategory($category2); $manager->flush(); } }
ããã§éèŠãªã®ã¯ãæ¥ç¶ã«é¢ä¿ãããšã³ãã£ãã£ãçããã«ããããããã
ãŸã mappedByå±æ§ãšinversedByå±æ§ã䜿çšããå¿
èŠãããããšã§ã ã ããã¯äºæ³å€ã®ããšã§ãããã1察å€ãé¢ä¿ãäœæãããšãã«èŠ³å¯ããåäœã¯ããã§ä¿æãããŸããmappedByå±æ§ãæå®ãããåŽã®ãšã³ãã£ãã£ãªããžã§ã¯ãã¯ãinversedByå±æ§ãæå®ãããåŽã®ãšã³ãã£ãã£ãªããžã§ã¯ãã«å²ãåœãŠãå¿
èŠããããŸã ããã§ãªãå ŽåãããããããŒãã«ã®ãšã³ããªã¯è¡šç€ºãããŸããã æã«åããŠããã®ç¹ã§ã©ã®ãšã³ãã£ãã£ãåŸå±ã§ããã2çªç®ã®ãšã³ãã£ãã£ã®ãªããžã§ã¯ããå²ãåœãŠãã®ã¯ãã®ãªããžã§ã¯ãã§ããããåé¢ããçæããå¿
èŠãããããšãããããŸãã ãã®å ŽåãåŸå±ãšã³ãã£ãã£ã¯Productã§ãããCategoryãªããžã§ã¯ãããã®ãªããžã§ã¯ãã«å²ãåœãŠãŸãã 誰ããæŸèæãªãã§ãããåé¿ããæ¹æ³ãç¥ã£ãŠããå Žåã泚éã®ã¿ãå€æŽ
ããŸã -
ã³ã¡ã³ãã«æžã蟌ã¿ãŸã ã ç§ã¯éåžžãã¡ã€ã³ãšã³ãã£ãã£ã®ã»ãã¿ãŒãå°ãä¿®æ£ããŠç®¡çããŸãïŒæè¿çºèŠããããã«ãDoctrine2ã®å
¬åŒããã¥ã¡ã³ãã«
ã¯åãåé¡ã®è§£æ±ºçãèšèŒã
ããŠããŸã ïŒïŒ
ãã£ã¯ã¹ãã£ããŒã¿ã®ããŒã¿ããŒã¹ãžã®èªã¿èŸŒã¿ãéå§ããããŒã¿ããŒã¹ããã§ãã¯ããŠãproduct_categoryãµããªãŒããŒãã«ã«4ã€ã®ãšã³ããªãå«ãŸããŠããããšã確èªããŸããåãšã³ããªã¯ãç¹å®ã®ã«ããŽãªãšç¹å®ã®è£œåéã®æ¥ç¶ã確ç«ããŸãã

ååž°æ¥ç¶
ååž°æ¥ç¶ã¯ãããèªäœããšã³ãã£ãã£äžã«æ§ç¯ãããŠããå Žåã«åŒã³åºãããŸãã ãŸãããã®æ¥ç¶ã¯1察1ã1察å€ãããã³å€å¯Ÿå€ã«ã§ããŸãã ããŒãã³ã°ããå ŽæããããŸãã æåã«ãå
¬åŒããã¥ã¡ã³ãã«èšèŒãããŠããªãããªã¢ã³ããèŠãŠã¿ãŸãããã
ãå€å¯Ÿå€ãã®åæ¹åååž°æ¥ç¶ã§ãã
ãŠãŒã¶ãŒã®æ¬è³ªãå€æŽããèªåãšå€å¯Ÿå€ã®é¢ä¿ãè¿œå ããŸãã
src / AppBundle / Entity / User.php ããã¯ãåæ¹åéä¿¡ã®æ£åžžãªäœ¿çšã®äŸã§ãããããã£ãŠããšã³ãã£ãã£ã¯ããããããŒãã«ãä»ããŠãã©ã€ããªããŒã«ãã£ãŠããèªäœã«ããããããŸããã€ãŸããåæ¹åæ§ã¯äžèŠã§ãã ãã³ãã«ã®ãšã³ãã£ãã£ã®çæãéå§ããããŒã¿æ§é ãæŽæ°ãããšã次ã®è¡ã§ãã£ã¯ã¹ãã£ãŒãè£å®ã§ããŸãã
çŸåšãç§ãã¡ãšäžç·ã«ããåãŠãŒã¶ãŒã¯ãã§ããã ãå€ãã®ãŠãŒã¶ãŒãã¬ã³ããæã€ããšãã§ããŸãã ããã¯ãããªãŒæ§é ã®ããã«ãäž»/åŸå±ã芪/åã®é¢ä¿ããªãå Žåã®ééå±€æ§é ã®åªããäŸã§ãã
次ã«ãååž°æ¥ç¶ãäœæããŠããªãŒæ§é ãåæããŸãã
ã«ããŽãªã®æ¬è³ªãå€æŽããããèªäœãš1察å€ã®é¢ä¿ãè¿œå ããŸããsrc / AppBundle / Entity / Category.php ããã§ã¯ãã¹ãŠãæ確ã§ãããšæããŸã-ã«ããŽãªã«ã¯èŠªãšåå«ããããŸããããŒã¿ããŒã¹æ§é ãæŽæ°ããã²ãã¿ãŒ/ã»ãã¿ãŒã¡ãœãããçæããåŸã誰ã誰ã®èŠªã§èª°ã誰ã®åå«ã§ãããã瀺ããã£ã¯ã¹ãã£ããŒã¿ãè¿œå ããŸãã
ååž°çãª1察1ã®é¢ä¿ã¯åæããŸããããããå¿
èŠãªå Žåãé¡æšããŠãèªåã§ãããæžãããšã¯åé¡ã§ã¯ãªããšæããŸããè€æ°ã®èŠªãšåå«ãååšããå¯èœæ§ãããéå±€çãªéããªãŒæ§é ã®æ§ç¯ã¯ãåãã¢ãããžãŒæ¹æ³ã§è¡ãããŸãããåé¡ã¯ãªããšæããŸãã圹ã«ç«ã€
éçºè
ã®ç°å¢ã§ã¢ããªã±ãŒã·ã§ã³ãèµ·åãããšãã«ããŒãžã®äžéšã«è¡šç€ºãããSymfonyããŒã«ããŒã䜿çšããŸãïŒ
ãšã³ãã£ãã£ã®ã¢ãããŒã·ã§ã³ãå°ç¡ãã«ããå ŽåãDoctrineã¯ããããããã«æ°ã¥ããããã§ãšã©ãŒã衚瀺ããŸãããã®ã¢ã€ã³ã³ãã¯ãªãã¯ãããšããšã©ãŒã«é¢ãã詳现ãèªãããšãã§ããŸããããã«ãããåé¡ã解決ã§ããŸããéè·¯äž
圌ã¯Signle Table Inheritanceãšäžç·ã«å€çžé¢ä¿ã®è©±é¡ã«è§Šããããšãèšç»ããŸããããèšäºã¯ãã§ã«æ³å€ã«æé·ããŸãããããã§ãç§ã¯ããããã¹ãŠæºåããŠãããŸããç§ãã©ããã§å°ç¡ãã«ãªã£ããã³ã¡ã³ããæžããŠãã ããããã®ãããªéã®ããã¹ãã§ã¯ãç®ã¯ãšãŠãç³ããã§ããããã«èšäºãæžããçµæã®ãããžã§ã¯ããæçš¿ããŸãããããããšã³ãã£ãã£éã®é¢ä¿ã®ãããã¯ãç 究ããŠããã ãã®äººã«ã¯ããããžã§ã¯ããæºåããã«ãã¹ãŠã®äœæ¥ãèªåã§è¡ãããšããå§ãããŸããããã¯è¯ããã¬ãŒãã³ã°ã§ãããã®èšäºã«ã¯ããããžã§ã¯ãããŒãããäœæããããã®ãã¹ãŠãå«ãŸããŠããŸãã