EC-CUBE4.0.2にてマスタテーブルを新たに作成します。 app/Customize/ 以下に Entity と Repository をそれぞれ作成します。 以下のコマンドでProxyクラスを生成します。 bin/console eccube:generate:proxies 続いて実行されるSQLを確認します。 bin/console doctrine:schema:update --dump-sql SQLを実行します。これでテーブルが作成されます。 bin/console doctrine:schema:update --dump-sql --force namespace が Eccube\Entity のものしか読み込まないため、管理画面に表示させるには MasterdataType を拡張する必要があります。 app/Customize/Form/Extension/MasterdataTypeExtension.php <?php namespace Customize\Form\Extension; use Doctrine\ORM\EntityManager; use Eccube\Form\Type\Admin\MasterdataType; use Symfony\Component\Form\AbstractTypeExtension; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\FormBuilderInterface; class MasterdataTypeExtension extends AbstractTypeExtension { private $entityManager; public function __construct(EntityManager $entityManager) { $this->entityManager = $entityManager; } /** * {@inheritdoc} */ public function buildForm(FormBuilderInterface $builder, array $options) { $masterdata = []; /** @var MappingDriverChain $driverChain */ $driverChain = $this->entityManager->getConfiguration()->getMetadataDriverImpl(); /** @var MappingDriver[] $drivers */ $drivers = $driverChain->getDrivers(); foreach ($drivers as $namespace => $driver) { if ($namespace == 'Eccube\Entity' || $namespace == 'Customize\Entity') { $classNames = $driver->getAllClassNames(); foreach ($classNames as $className) { /** @var ClassMetadata $meta */ $meta = $this->entityManager->getMetadataFactory()->getMetadataFor($className); if (strpos($meta->rootEntityName, 'Master') !== false && $meta->hasField('id') && $meta->hasField('name') && $meta->hasField('sort_no') ) { $metadataName = str_replace('\\', '-', $meta->getName()); $masterdata[$metadataName] = $meta->getTableName(); } } } } $options = $builder->get('masterdata')->getOptions(); $options['choices'] = array_flip($masterdata); $builder ->add('masterdata', ChoiceType::class, $options); } /** * {@inheritdoc} */ public function getExtendedType() { return MasterdataType::class; } } |