2011-04-15 105 views
2

我試圖用一個註釋獲取很多的關係,但只要我使用聯接我將結束與以下數據:學說2個實體一對多關係

entities\Topic 
    id = 1   // integer 
    title = "example" // string 
    comments    // entities\Comment = oneToMany 
     id = 1     // integer 
     comment = "first comment" // string 
     topic      // entities\Topic = manyToOne 
      id = 1 // again.. 
      title = "example" 

爲什麼當我加入主題評論時,doctrine是否取得評論中的manyToOne關係?這是我的查詢:

$this->em->createQueryBuilder() 
     ->from('Entities\Topic', 't') 
     ->select("t, c") 
     ->leftjoin("t.comments", 'c') 
     ->where('t.id = :id') 
     ->setParameter('id', 1) 
     ->getQuery()->getSingleResult(); 

不應該主題屬性爲空或至少是一個空的arrayCollection?

另一件事:

爲什麼我得到一個PersistentCollection早在評論時,我指定評論是一個ArrayCollection?在我可以循環訪問之前,是否總是需要在PersistentCollection上使用解包?

回答

3

在第一位 - 它可能填充主題,因爲它已經有了數據。如果數據尚未掌握,那麼您可能在那裏有代理實體。它永遠不會爲空,因爲null將是錯誤的(評論確實有一個主題)。

至於ArrayCollection/PersistentCollection,您可以放心地忽略區別。我不知道實現細節,但基本上,EM在PersistentCollections中給出了一些東西,我假定它在管理集合中的實體方面發揮作用。如果你正在創建集合,你可以使用ArrayCollection。對不起,我不能在這裏更具體,但底線是,你應該想想你從EM獲得的任何PersistentCollections只是「一個集合」

+0

有沒有辦法關閉兒童的人口兒童?我將數據發送回客戶端,因此我需要儘可能保持簡約而不會失去靈活性。 – Dennis 2011-04-16 09:14:59

+0

說實話,我不確定最好的方法。我通常爲要序列化的任何實體編寫一個toArray()方法,因此我可以控制序列化併發送到客戶端的樹的深度。 – timdev 2011-04-16 16:26:49