我开始严肃对待学说。
在我目前的挑战中,我必须构建一个包含地址的实体。我们举一个例子。
class Address {
private $country;
private $street;
}
class Person {
private $name;
/**
* @var Address
*/
private $address;
}
我想要实现的是在数据库中只有一个表,其中Address嵌入在Person中。类似的东西:
create table Person {
name string(255),
street string(255),
country string(255)
}
我知道这对于像Hibernate这样的ORM是可行的,我希望我可以和Doctrine有相同的行为。
如何与Doctrine建立一对一的嵌入式关系?
答案 0 :(得分:0)
不幸的是,Doctrine的ORM不支持嵌入式对象。到目前为止,我发现的唯一灵魂就是自己进行映射:
class Person {
...
protected $addressName;
protected $addressStreet;
protected $addressCountry;
public function getAddress() {
return new Address($this->addressName, $this->addressStreet, $this->addressCountry);
// or Address::create(...) if you wan't to have a simple constructor
}
public function setAddress(Address $address) {
$this->addressName = $address->getName();
$this->addressStreet = $address->getStreet();
$this->addressCountry = $address->getCountry();
}
...
}
这是很多重复的代码,因此您可以考虑将其移到单独的trait中。