2013-01-03 18 views
0

我想要做的映射,這是否:Symfony2中 - 如何構造的id =產品映射

用戶可以擁有多個遊戲遊戲可以有多個店主

我有game表和gameownershipuserid列。我如何連接這些字段?我想要gameuser字段在ownershipusergame表有關。

我試過OneToManyManyToMany,但第一個導致生成附加列。我不要想要在game表中插入任何東西。

- 編輯 - 我@ManyToMany代碼:

/** 
* @ORM\ManyToMany(targetEntity="Ownership") 
* @ORM\JoinTable(name="ownership", 
*  joinColumns={JoinColumn(name="user", referencedColumnName="id")}, 
*  inverseJoinColumns={JoinColumn(name="game", referencedColumnName="id")} 
*  ) 
*/ 

它會導致一個錯誤的Symfony的命令行:

[Doctrine\Common\Annotations\AnnotationException]        
    [Semantical Error] Couldn't find constant JoinColumn, property GameShelf\Us 
    ersBundle\Entity\User::$ownership. 
+0

假設這段代碼在User實體中,targetEntity應該是Game而不是Ownership。試試看。 – Squazic

回答

2

當然對付其他字段,你需要很多人如果有很多關係,就像你說:

用戶可以擁有多個遊戲。遊戲可以有多個所有者。

該學說應創建第三個表(可能只包含兩個外鍵:game_id和ownership_id)。

錯誤是由於原理不知道JoinColumn是什麼造成的。你剛剛做了錯誤的註釋,因爲你忘了(再次!;))用@ORM在JoinColumn之前。正確的註釋應該看起來像這樣:

/** 
* @ORM\ManyToMany(targetEntity="Ownership") 
* @ORM\JoinTable(name="ownership", 
*  joinColumns={@ORM\JoinColumn(name="user", referencedColumnName="id")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="game", referencedColumnName="id")} 
*  ) 
*/ 
+0

嘿面前,我犯這樣的錯誤了一遍又一遍。謝謝你。但是 - 如果我想要很多關係(比如說'users'到'rates','ownership','games'到'ownership','rates','genres'等等),那麼沒有太多的表格(' games_rates','games_genres')?這不是很混亂嗎? –

+0

事實上,如果你想保持多對多的關係,你沒有任何選擇。別擔心 - 因爲這個原因,不會那麼麻煩。 – Cyprian

+0

Oooookay,我明白了。但是,當我有很多這樣的表格時,我如何將這些信息打印在一個地方?多個連接?我對於Doctrine和SQL知之甚少,無法想象這一點。 –

0

聽起來像是你需要引入一個新的實體(像OwnedGame)持有遊戲和所有者之間的連接(可能還有它自己的屬性,例如購買時等)。

然後OwnedGame將是ManyToOne與遊戲和所有者,並且遊戲和所有者都不需要包含新列。

+0

是否有必要?我的意思是,純MySQL不是。當我想要擴大項目,帶來收視率等時,我將被迫創建多個實體。我正在尋求解決這個既不創建太多額外的列也不創建額外的實體。 –

0

你對你想要的描述根本不適合。 一方面,您希望僅在用戶和遊戲之間建立關係,並且只在遊戲和所有者之間建立關係。

但另一方面,你說用戶和所有者在某些方面是相關的,但遊戲和用戶不是。

您應該仔細閱讀 http://docs.doctrine-project.org/en/2.0.x/reference/association-mapping.html#many-to-many-unidirectional 並嘗試找到您真正需要的東西。 我會推薦與連接表的ManyToMany關係。因此,你不要對你的表

+0

Uhm,user = owner :)我做了一個塗鴉來演示:http://i.imagebanana.com/img/k25rnzk4/Beznazwy1.gif 另外,我嘗試了文檔中的代碼(將其修改爲「工作「與Symfony),我得到了錯誤。檢查我的編輯問題 –

+0

你忘了把 @ORM \ 在 'JoinColumn' – Schwierig