2013-01-04 48 views
0

之间的连接我有三个表:如何映射三个表

  • 游戏columns: id | name(如1 |晕。)
  • 自己columns: id | type_id | type_name(如1 | 1 |上的心愿。)
  • 用户columns: id | name (如:1 |托梅克)

现在我已经是这些表之间的连接ManyToMany

用户(表user_own

/** 
* @ORM\ManyToMany(targetEntity="Own") 
* @ORM\JoinTable(
*  joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="type_id", referencedColumnName="id")} 
*) 
*/ 

自己(表own_game

/** 
* @ORM\ManyToMany(targetEntity="Game") 
* @ORM\JoinTable(
*  joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="game_id", referencedColumnName="id")} 
*) 
*/ 

我的查询:

public function getOwned() { 
     return $this->getEntityManager() 
      ->createQuery(' 
       SELECT u, o, g FROM AcmeGoBundle:User u 
       JOIN u.owners o 
       JOIN u.games g 
      ') 
      ->getResult(); 
    } 

我可以检索游戏通过partic资ular 用户,但我无法连接类型的所有权。我怎样才能做到这一点?

+0

你只需要表格 - 用户和游戏。 Doctrine将负责创建连接表。 – moonwave99

+0

我有'用户'和'游戏'表。我需要在他们之间编写'ManyToMany'? –

+0

是的,如果你的应用有这样的关系[我相信]。 – moonwave99

回答

1

要创建ManyToMany附加列,并且需要手动创建这些数据。

原则ManyToMany关系创建一个连接表,其中包含连接实体的ID。所以你需要由你自己的实体创建一个名为ex。 UserOwnsOneToManyUser的关系和另一个OneToMany关系Own。然后你可以在里面添加额外的字段。

检查该问题:Doctrine2: Best way to handle many-to-many with extra columns in reference table