/** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { $reader = new AnnotationReader(); /** @var ManagerRegistry $doctrine */ $doctrine = $this->getContainer()->get('doctrine'); $em = $doctrine->getManager(); $cmf = $em->getMetadataFactory(); $existing = []; $created = []; /** @var ClassMetadata $metadata */ foreach ($cmf->getAllMetadata() as $metadata) { $refl = $metadata->getReflectionClass(); if ($refl === null) { $refl = new \ReflectionClass($metadata->getName()); } if ($reader->getClassAnnotation($refl, 'Padam87\\AttributeBundle\\Annotation\\Entity') != null) { $schema = $em->getRepository('Padam87AttributeBundle:Schema')->findOneBy(['className' => $metadata->getName()]); if ($schema === null) { $schema = new Schema(); $schema->setClassName($metadata->getName()); $em->persist($schema); $em->flush($schema); $created[] = $metadata->getName(); } else { $existing[] = $metadata->getName(); } } } $table = new Table($output); $table->addRow(['Created:', implode(PHP_EOL, $created)]); $table->addRow(new TableSeparator()); $table->addRow(['Existing:', implode(PHP_EOL, $existing)]); $table->render(); }
/** * @test * @group functional */ public function entityShouldHaveAttributes() { $container = static::$kernel->getContainer(); /** @var ManagerRegistry $doctrine */ $doctrine = $container->get('doctrine'); /** @var EntityManager $em */ $em = $doctrine->getManager(); $metadata = $em->getMetadataFactory()->getAllMetadata(); $schemaTool = new SchemaTool($em); $schemaTool->dropSchema($metadata); $schemaTool->createSchema($metadata); $schema = new Schema(); $schema->setClassName('Padam87\\AttributeBundle\\Tests\\Model\\Subscriber'); /** @var DebugStack $profiler */ $profiler = $container->get('doctrine.dbal.logger.profiling.default'); $subscriber = new Subscriber(); // FIRST PASS for ($i = 0; $i < 5; $i++) { $definition = new Definition(); $definition->setName($i); $definition->setType('text'); $schema->addDefinition($definition); } $em->persist($schema); $em->flush($schema); $em->refresh($schema); $this->assertCount(5, $schema->getDefinitions()); $em->persist($subscriber); $em->flush($subscriber); $profiler->queries = array(); // reset the profiler to show oly relevant queries $em->refresh($subscriber); $this->assertCount(5, $subscriber->getAttributes()); $this->assertCount(16, $profiler->queries); // SECOND PASS for ($i = 5; $i < 10; $i++) { $definition = new Definition(); $definition->setName($i); $definition->setType('text'); $schema->addDefinition($definition); } $em->persist($schema); $em->flush($schema); $em->refresh($schema); $this->assertCount(10, $schema->getDefinitions()); $subscriber->setName('test'); $em->flush($subscriber); $profiler->queries = array(); // reset the profiler to show oly relevant queries $em->refresh($subscriber); $this->assertCount(10, $subscriber->getAttributes()); $this->assertCount(16, $profiler->queries); }