Symfony2 / Doctrine:一对一,嵌入式实体

时间:2013-08-31 11:57:37

标签: php symfony orm doctrine-orm

我开始严肃对待学说。

在我目前的挑战中,我必须构建一个包含地址的实体。我们举一个例子。

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建立一对一的嵌入式关系?

1 个答案:

答案 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中。