0

我想做这样的映射:

用户可以拥有多个游戏游戏可以有多个所有者

我在表中有id列,在game表中gameuserownership。我如何连接这些字段?我想要game和表相关的字段userownershipusergame

我试过OneToManyand 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.  
4

3 回答 3

2

当然,如果像你说的那样,你需要多对多的关系:

用户可以拥有多个游戏。游戏可以有多个所有者。

Doctrine 应该创建第三个表(它只能包含两个外键:game_id 和 owner_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")}
 *      )
 */
于 2013-01-03T16:16:17.070 回答
0

听起来你需要引入一个新的实体(比如 OwnedGame)来保持游戏和所有者之间的联系(可能还有它自己的属性,比如它被购买的时间等)。

那么 OwnedGame 将是带有 Game 和 Owner 的 ManyToOne,Game 和 Owner 都不需要包含新列。

于 2013-01-03T14:47:05.250 回答
0

你对你想要的东西的描述根本不合适。一方面,您希望仅在用户和游戏之间建立关系,并且只在游戏和所有者之间建立关系。

但另一方面,你说用户和所有者在某种程度上是相关的,但游戏和用户不是。

您应该通读 http://docs.doctrine-project.org/en/2.0.x/reference/association-mapping.html#many-to-many-unidirectional 并尝试找到您真正需要的内容。我会推荐与连接表的多对多关系。因此,您不必处理表中的其他字段

于 2013-01-03T14:51:49.527 回答