diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php b/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php index f265814b1..75b528175 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php @@ -1852,7 +1852,7 @@ class ClassMetadataInfo implements ClassMetadata */ public function hasField($fieldName) { - return isset($this->fieldMappings[$fieldName]); + return isset($this->fieldMappings[$fieldName]) || isset($this->embeddedClasses[$fieldName]); } /** diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC6460Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC6460Test.php new file mode 100644 index 000000000..d50e2dbda --- /dev/null +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC6460Test.php @@ -0,0 +1,100 @@ +_schemaTool->createSchema( + [ + $this->_em->getClassMetadata(DDC6460Entity::class), + $this->_em->getClassMetadata(DDC6460ParentEntity::class), + ] + ); + } catch (\Exception $e) { + } + } + + public function testInlineEmbeddable() + { + $isFieldMapped = $this->_em + ->getClassMetadata(DDC6460Entity::class) + ->hasField('embedded'); + + $this->assertTrue($isFieldMapped); + } + + public function testInlineEmbeddableProxyInitialization() + { + $entity = new DDC6460Entity(); + $entity->id = 1; + $entity->embedded = new DDC6460Embeddable(); + $entity->embedded->field = 'test'; + $this->_em->persist($entity); + $this->_em->flush(); + + $second = new DDC6460ParentEntity(); + $second->id = 1; + $second->lazyLoaded = $entity; + $this->_em->persist($second); + $this->_em->flush(); + + $this->_em->clear(); + + $proxy = $this->_em->getRepository(DDC6460ParentEntity::class)->findOneById(1); + + $this->assertNotNull($proxy->lazyLoaded->embedded); + } +} + +/** + * @Embeddable() + */ +class DDC6460Embeddable +{ + /** @Column(type="string") */ + public $field; +} + +/** + * @Entity() + */ +class DDC6460Entity +{ + /** + * @Id + * @GeneratedValue(strategy = "NONE") + * @Column(type = "integer") + */ + public $id; + + /** @Embedded(class = "DDC6460Embeddable") */ + public $embedded; +} + +/** + * @Entity() + */ +class DDC6460ParentEntity +{ + /** + * @Id + * @GeneratedValue(strategy = "NONE") + * @Column(type = "integer") + */ + public $id; + + /** @ManyToOne(targetEntity = "DDC6460Entity", fetch="EXTRA_LAZY") */ + public $lazyLoaded; +}