/**
  * {@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);
 }