/** * @test */ public function embeddablesInsideClonedProxiedEntitiesAreCorrectlyLoaded() { $this->markTestSkipped('This is possibly a bug of Doctrine'); $entity = new TestEntity(); $entity->setName('Andi'); $relatedEntity = new TestEntity(); $relatedEntity->setName('Robert'); $embedded = new TestEmbeddable('Foo'); $relatedEntity->setEmbedded($embedded); $valueObject = new TestValueObject('Bar'); $relatedEntity->setRelatedValueObject($valueObject); $entity->setRelatedEntity($relatedEntity); $clonedRelatedEntity = clone $entity->getRelatedEntity(); $this->assertNotNull($clonedRelatedEntity->getEmbedded(), 'Unproxied clone embedded is null'); $this->testEntityRepository->add($entity); $this->testEntityRepository->add($relatedEntity); $this->persistenceManager->persistAll(); $this->persistenceManager->clearState(); $entityIdentifier = $this->persistenceManager->getIdentifierByObject($entity); $loadedEntity = $this->testEntityRepository->findByIdentifier($entityIdentifier); $clonedRelatedEntity = clone $loadedEntity->getRelatedEntity(); $this->assertNotNull($clonedRelatedEntity->getRelatedValueObject(), 'Proxied clone value object is null'); $this->assertNotNull($clonedRelatedEntity->getEmbedded(), 'Proxied clone embedded is null'); $this->assertEquals('Foo', $clonedRelatedEntity->getEmbedded()->getValue()); }
/** * @test */ public function doctrineEmbeddablesAreActuallyEmbedded() { /* @var $entityManager \Doctrine\Common\Persistence\ObjectManager */ $entityManager = $this->objectManager->get('Doctrine\\Common\\Persistence\\ObjectManager'); $schemaTool = new \Doctrine\ORM\Tools\SchemaTool($entityManager); $metaData = $entityManager->getClassMetadata('TYPO3\\Flow\\Tests\\Functional\\Persistence\\Fixtures\\TestEntity'); $this->assertTrue($metaData->hasField('embedded.value'), 'ClassMetadata does not contain embedded value'); $schema = $schemaTool->getSchemaFromMetadata(array($metaData)); $this->assertTrue($schema->getTable('persistence_testentity')->hasColumn('embedded_value'), 'Database schema does not contain embedded value field'); $embeddable = new TestEmbeddable('someValue'); $testEntity = new TestEntity(); $testEntity->setEmbedded($embeddable); $this->testEntityRepository->add($testEntity); $this->persistenceManager->persistAll(); $this->persistenceManager->clearState(); /* @var $testEntity TestEntity */ $testEntity = $this->testEntityRepository->findAll()->getFirst(); $this->assertEquals('someValue', $testEntity->getEmbedded()->getValue()); }