我有三张桌子:
columns: id | name
(例如1 | Halo)columns: id | type_id | type_name
(例如,1 | 1 | on wishlist)columns: id | name
(例如1 | Tomek)现在我拥有的是这些表之间的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();
}
我可以检索特定用户拥有的游戏,但我无法连接所有权的类型。我怎么能这样做?
答案 0 :(得分:1)
要为ManyToMany
添加包含一些数据的附加列,您需要手动创建。
Doctrine ManyToMany
关系创建一个连接表,其中包含已连接实体的ID。所以你需要由你自己的名为ex的实体创建。 UserOwns
OneToMany
与User
和OneToMany
关系Own
的关系{{1}}。然后,您可以在其中添加包含数据的其他字段。
检查问题:Doctrine2: Best way to handle many-to-many with extra columns in reference table