2013-05-28 33 views
0

我有一個教條實體映射的問題。 有一個基本的用戶實體,我想創建一個Friend實體,由兩個外鍵組成的用戶表,友誼的第一個所有者和另一個。 我試圖這樣做(yaml),實體生成的方式是正確的,但是當我使用doctrine scheme更新創建數據庫時,它具有完全不同的結果。Symfony2/Doctrine2關係相同的對象兩次

用戶實體:

..\..\Entity\User: 
type: entity 
uniqueConstraints: 
    usernameCanonical: 
     columns: usernameCanonical 
    emailCanonical: 
     columns: emailCanonical 
oneToMany: 
    owners: 
     targetEntity: Friend 
     mappedBy: owner 
    friends: 
     targetEntity: Friend 
     mappedBy: friend 

而且朋友實體:

..\..\Entity\Friend: 
type: entity 
table: friend 
lifecycleCallbacks: 
    prePersist: [setCreated, setModified] 
    preUpdate: [setModified] 
manyToOne: 
    owner: 
     targetEntity: User 
     inversedBy: friends 
     joinColumn: 
      name: user 
      referencedColumnName: id 
      onDelete: cascade 
    friend: 
     targetEntity: User 
     inversedBy: owners 
     joinColumn: 
      name: user 
      referencedColumnName: id 
      onDelete: cascade 

這應該從相知到用戶創建兩個陌生的,而是它創造一個這樣的:

ALTER TABLE friend ADD CONSTRAINT FK_55EEAC618D93D649 FOREIGN KEY (user) REFERENCES users (id) ON DELETE CASCADEe 
+0

這對我來說不是很清楚你想做什麼。你想在你的朋友實體中做什麼?你不能在你的用戶實體中使用多對多的自引用嗎? – copndz

+0

基本上映射2個用戶實體在一起,但我確實不喜歡使用映射,只有兩個int值,沒有任何外鍵 – ghostika

+0

你應該看看Doctrine文檔(ManyToMany Self-referencing):http://docs.doctrine -project.org/en/2.0.x/reference/association-mapping.html#many-to-many-self-referencing – copndz

回答

2

常見的「朋友」關係是ManyToMany SelfReferencing學說關係,它在0中用作示例

+0

非常感謝,完美。一個簡單的問題,你知道嗎?我可以怎樣擴展與其他領域的「朋友表」,比如createdAt?或者因爲它不是一個真正的實體,我不能? – ghostika

+0

如果你想這樣做,這不是一個ManyToMany關係,而是一對一多對多。你必須創建一個FriendUser實體,其中包含2個用戶實體作爲主要組合鍵,並且你想要的每個屬性 – copndz

+0

嗯,那麼我不明白爲什麼我的原始代碼沒有工作,因爲我有一個用戶和一個朋友實體,你建議。 – ghostika