2014-10-27 86 views
0

我有一個困難,我似乎無法解決,即使它似乎我應用其他發現的良好食譜。一對一主義一對一堅持ID自動與註釋

我收到以下錯誤:

類型的實體的appbundle \實體\用戶\學生缺少一個分配的ID 爲字段「用戶」。此實體 的標識符生成策略要求在調用EntityManager#persist() 之前填充ID字段。如果你想自動生成標識符,而你需要相應地調整元數據映射。

我在symfony的2我的實體用戶和學生之間的教義2一一對應的關係,當我堅持與學生的子窗體的用戶,我想學生的ID將被自動設定爲用戶的ID。

我有兩類:

class Student 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer", length=11) 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @ORM\Id 
    * @ORM\OneToOne(targetEntity="\AppBundle\Entity\User\User", inversedBy="student") 
    * @ORM\JoinColumn(name="id", referencedColumnName="id", nullable=false, unique=true, onDelete="cascade") 
    */ 
    private $user; 
... 
} 


class User 
{ 

    /** 
    * @ORM\OneToOne(targetEntity="\AppBundle\Entity\User\Student", mappedBy="user", cascade={"persist"}) 
    */ 
    private $student; 
} 

當我堅持的實體,我具有上述的錯誤。如果我打電話

$ entity-> getStudent() - > setUser($ entity);

之前,我堅持的實體,它就好了,我得到了學生堅持用相同的ID的用戶,除了我不想因爲我使用一個表單管理器得到具體的我用堅持的方法作爲一種服務,其他行爲也很常見。

那麼是否可以設置一些註釋來獲得學說,以便在創建學生時自動將學生ID設置爲等於用戶ID? 如果是的話,怎麼樣?

謝謝了很多, 問候

回答

0

編輯:

我已經看到你更新你的問題。我不是是否可能相當舒爾,但你可以試試

class Student 
{ 
    /** 
    * @ORM\Column(name="id", type="integer", nullable=false, unique=true) 
    * @ORM\Id 
    */ 
    private $id; 

    /** 
    * @ORM\OneToOne(targetEntity="\AppBundle\Entity\User\User", inversedBy="student") 
    * @ORM\JoinColumn(name="id", referencedColumnName="id", nullable=false, unique=true, onDelete="cascade") 
    */ 
    private $user; 

    // ... 
} 

我回去使用id列,但沒有自然而然增量之前定義它。

+0

好吧,我已經試過了,它不會改變,我得到同樣的錯誤。我嘗試使用user_id和something_id,我沒有忘記更新數據庫模式,我試圖刪除整個@ORM \ JoinColumn行,但這沒有什麼區別。我似乎無法理解這個問題......如果您有進一步的想法,歡迎! – 2014-10-27 20:59:38

+0

好吧,我明白,我打算做的只是由Doctrine 2.1支持,而不是進一步的版本......我必須使用一個Id和一個額外的外鍵來使它工作。不能只是一個相同的列。 – 2014-10-28 15:11:54