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

时间:2013-01-04 12:09:05

标签: symfony doctrine

我有三张桌子:

  • 游戏columns: id | name(例如1 | Halo)
  • 拥有columns: id | type_id | type_name(例如,1 | 1 | on wishlist)
  • user 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();
    }

我可以检索特定用户拥有的游戏,但我无法连接所有权的类型。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

要为ManyToMany添加包含一些数据的附加列,您需要手动创建。

Doctrine ManyToMany关系创建一个连接表,其中包含已连接实体的ID。所以你需要由你自己的名为ex的实体创建。 UserOwns OneToManyUserOneToMany关系Own的关系{{1}}。然后,您可以在其中添加包含数据的其他字段。

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

相关问题