_schemaTool->createSchema(array( $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC93Person'), $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC93Address'), )); } public function testCRUD() { $person = new DDC93Person(); $person->name = "Tara"; $person->address = new DDC93Address(); $person->address->street = "United States of Tara Street"; $person->address->zip = "12345"; $person->address->city = "funkytown"; // 1. check saving value objects works $this->_em->persist($person); $this->_em->flush(); $this->_em->clear(); // 2. check loading value objects works $person = $this->_em->find(DDC93Person::CLASSNAME, $person->id); $this->assertInstanceOf(DDC93Address::CLASSNAME, $person->address); $this->assertEquals('United States of Tara Street', $person->address->street); $this->assertEquals('12345', $person->address->zip); $this->assertEquals('funkytown', $person->address->city); // 3. check changing value objects works $person->address->street = "Street"; $person->address->zip = "54321"; $person->address->city = "another town"; $this->_em->flush(); $this->_em->clear(); $person = $this->_em->find(DDC93Person::CLASSNAME, $person->id); $this->assertEquals('Street', $person->address->street); $this->assertEquals('54321', $person->address->zip); $this->assertEquals('another town', $person->address->city); // 4. check deleting works $personId = $person->id;; $this->_em->remove($person); $this->_em->flush(); $this->assertNull($this->_em->find(DDC93Person::CLASSNAME, $personId)); } } /** * @Entity */ class DDC93Person { const CLASSNAME = __CLASS__; /** @Id @GeneratedValue @Column(type="integer") */ public $id; /** @Column(type="string") */ public $name; /** @Embedded(class="DDC93Address") */ public $address; } /** * @Embeddable */ class DDC93Address { const CLASSNAME = __CLASS__; /** * @Column(type="string") */ public $street; /** * @Column(type="string") */ public $zip; /** * @Column(type="string") */ public $city; }