2013-08-31 45 views
0

我開始嚴肅玩弄教條。Symfony2/Doctrine:一對一,嵌入式實體

在我目前的挑戰中,我必須建立一個包含地址的實體。我們舉個例子吧。

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建立嵌入式一對一關係?

回答

0

不幸的是,學說的ORM不支持嵌入對象。我迄今發現的唯一soultion是做你自己的映射:

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

+1

主義支持嵌入對象:http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/tutorials/embeddables.html –

+0

@PavelGalaton:是的,他們終於增加了對它的支持! – Crozin