2012-04-05 81 views
0

我有2個實體:UserAvatar。每個用戶都可以從列表中選擇一個頭像,所以我認爲這是一個One2One單向關係。問題是,當我保存表單時,db中的字段avatar_id始終爲NULLSymfony2形式和Doctrine OneToOne關係

讓我們來看看代碼:

class User implements UserInterface 
{ 
    /** 
    * @var int $avatarId 
    * 
    * @ORM\Column(name="avatar_id", type="integer", nullable=true) 
    */  
    private $avatarId; 

    /** 
    * @var Avatar 
    * 
    * @ORM\OneToOne(targetEntity="Avatar", cascade={"persist", "remove"}) 
    */ 
    private $avatar; 

} 

當我在保存之前var_dump用戶對象,領域avatarId包含Avatar對象,但ID不會被保存。我做錯了什麼?

["avatarId":"Test\UserBundle\Entity\User":private]=> 
    object(Test\UserBundle\Entity\Avatar)#419 (5) { 
     ["id":"Test\User\Bundle\Entity\Avatar":private]=> 
      int(3) 
     ["imageName":"Test\UserBundle\Entity\Avatar":private]=> 
      string(14) "death-dark.jpg" 
    } 

回答

1

你不需要avatarId場,因爲avatar字段將自動照顧它。您可以使用@JoinColumn註釋來顯式設置引用列名稱。

+0

我刪除了avatarId字段,但出現以下錯誤:屬性avatarId在類Test \ UserBundle \ Entity \ User中不存在 – Gianluca78 2012-04-05 14:55:59

+0

根本不需要它。 「avatar」字段是您需要處理的內容。 avatar_id列自動處理。 – 2012-04-05 15:00:51

+0

好的!我知道了!謝謝! – Gianluca78 2012-04-05 15:08:38

1

有幾件事情:

ID列通常與以下注釋生成:

/** 
* @ORM\Id @ORM\Column(type="integer") 
* @ORM\GeneratedValue 
*/ 

這告訴ORM當你創建一個新的對象來自動生成一個值,因此,當您轉儲對象在持續之前會有一個值。

如果Avatars可以被該列表中的多個人使用,那麼這將成爲ManyToOne關係(許多用戶使用一個頭像,多個用戶使用頭像),並且您的OneToOne關係中有一個註釋。

+0

謝謝,非常有用! – Gianluca78 2012-04-05 15:09:05