我想做这样做的映射:
用户可以拥有多个游戏。 游戏可以有多个所有者。
我在id
表格中有game
列,game
表格中有user
和ownership
列。我如何连接这些字段?我希望game
中的user
和ownership
字段与user
和game
表相关。
我尝试了OneToMany
和ManyToMany
,但第一个会导致生成其他列。我不想要在game
表中插入任何内容。
- edit-- 我的@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 :(得分:2)
当然,如果像你说的那样,你需要多对多的关系:
用户可以拥有多个游戏。游戏可以拥有多个所有者。
Doctrine应创建第三个表(它可能只包含两个外键:game_id和ownership_id)。
导致错误是因为Doctrine不知道JoinColumn
是什么。你只是做了错误的注释,因为你忘了(再次!;))在JoinColumn
之前加上`@ORM。正确的注释应如下所示:
/**
* @ORM\ManyToMany(targetEntity="Ownership")
* @ORM\JoinTable(name="ownership",
* joinColumns={@ORM\JoinColumn(name="user", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="game", referencedColumnName="id")}
* )
*/
答案 1 :(得分:0)
听起来你需要引入一个新的实体(类似于OwnedGame),它保存游戏和所有者之间的连接(可能还有它自己的属性,比如购买时等)。
然后OwnedGame将是ManyToOne with Game和Owner,游戏和所有者都不需要包含新列。
答案 2 :(得分:0)
您对所需内容的描述根本不适合。 一方面,您希望仅在用户和游戏之间建立关系,并且仅在游戏和所有者之间建立关系。
但另一方面,你说用户和用户在某种程度上是相关的,但游戏和用户不是。
你应该通读 http://docs.doctrine-project.org/en/2.0.x/reference/association-mapping.html#many-to-many-unidirectional 并试着找到你真正需要的东西。 我建议使用连接表的ManyToMany关系。因此,您不必处理表中的其他字段