2012-09-23 150 views
2
/** @Entity */ 
class First 
{ 
    /** @OneToMany(targetEntity="Second", mappedBy="parent") */ 
    protected $secondList; 

    // access methods here 
    public function __construct() 
    { 
     $this->secondList = new ArrayCollection(); 
    } 
} 

/** @Entity */ 
class Second 
{ 
    /** 
    * @ManyToOne(targetEntity="First", inversedBy="secondList") 
    * @JoinColumn(name="First_id", referencedColumnName="Id") 
    */ 
    protected $parent; 
} 

下面是從Second類考慮ArrayCollection $secondList元素的問題。 Second ManyToOne關係正常工作。也許我在初始化持久性方面做了錯誤(因爲SQL基礎中的First_Id始終是null)。學說2:一對多關係

$first = new Second(); 
$second = new First(); 
$first->getSecond()->add($second); 
$em->persist($second); 
$em->persist($first); 

有什麼建議嗎?

回答

1

Doctrine2 docs這樣說:

In the case of bi-directional associations you have to update the fields on both sides: 

這意味着你必須做一些事情,如:

$second->setParent($first); 

由於$second有外鍵。 或者您可以將cascade={"persist"}選項添加到$first->secondList屬性。

+0

好吧,這真的幫助我設置第二個表記錄中的First_Id列。但是,試圖獲取First類對象並不會將Second取到「ArrayCollection」。我只有空集合:| –

+0

所以在數據庫中一切都很好?你如何獲取這些東西?你如何檢查你有什麼?因爲當你調用$ first-> getSecond()時,它應該加載它。 – Pinetree

+0

事實上,這就是我要做的。 DB是好的(最終模式是由doctrine tool-kit創建的)。我使用來自'EntityManager'類的find()或getRepository()方法獲取對象。對象被正確創建,即使我只有'Second'類對象,我與'First'相關的類對象有充分的關係。噢,我用'serialize($ first-> getSecondList() - > current())'檢查這個列表,'$ takedSecond-> getSomeOtherValue()'顯示錯誤在非對象變量上使用方法。 –

1

您應該確保在第一課中關閉括號。

/** @OneToMany(targetEntity = "Second", mappedBy = "parent") */ 

如果這不是問題 - 是否有任何錯誤信息?

+0

哦,颱風。沒有錯誤消息,但如果我嘗試堅持第一類對象之前第二有關於使用級聯映射的錯誤(某些屬性,我還沒有找到關於必要使用的教義引用)。 –

+0

嘗試將此添加到您的OneToMany關係(針對級聯錯誤):'cascade = {「persist」}我不完全確定其他問題是什麼......是否所有內容都保存到數據庫中? – mbinette