0

我开始严肃地玩教义。

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

class Address {
    private $country;
    private $street;
}

class Person {
    private $name;

    /**
     * @var Address
     */
    private $address;
}

我想要实现的是在数据库中只有一个表,地址嵌入到 Person 中。类似的东西:

create table Person {
     name string(255),
     street string(255),
     country string(255)
}

我知道这对于像 Hibernate 这样的 ORM 是可能的,我希望我可以对 Doctrine 有同样的行为。

我怎样才能与 Doctrine 建立嵌入式的一对一关系?

4

1 回答 1

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 中

于 2013-08-31T12:07:56.563 回答