如何使用 Doctrine 从 JoinTable 映射

How to Mapping from JoinTable with Doctrine

我的 ERM/database 中有以下 table:

卡片扩展card_expansion
ManyToMany-卡与扩展的关系。一张卡可以有很多扩展,一个扩展可以容纳很多卡。

合集
需要扩展多少张卡的描述。扩展 B 中的卡 A 需要 3 次。所以 OneToManycard_expansion 的关系。

我想使用 Doctrine 在我的实体对象中映射这些关系。卡和扩展之间的映射没有问题。 但是由于 card_expansion table 不是由实体直接映射的,所以我不知道如何从我的 Collection 实体访问它或者我必须使用哪个注释来构建正确建立连接...

我需要映射什么才能让它工作?

这是我的 Expansion 实体的代码:

/**
 * @Entity
 * @Table(name="expansion")
 */
class Expansion {

...
    /**
     * @ManyToMany(targetEntity="Card")
     * @JoinTable(name="card_expansion",
     *     joinColumns={@JoinColumn(name="_expansion", referencedColumnName="id")},
     *     inverseJoinColumns={@JoinColumn(name="_card", referencedColumnName="id", unique=true)})
     */
    private $cards;

    public function __construct () {
        $this->cards = new ArrayCollection();

    }

这是我的 Collection 实体

/**
 * @Entity
 * @Table(name="collection")
 */
class Collection{

 /**
     * @OneToMany(targetEntity="???")
     * @JoinTable(name="card_in_expansion")
     */
    private $card_in_expansion;

您可以将 CardExpension 之间的关系设为实体 CardExpension。然后你就可以在你的模型中使用它了。

而不是以下内容:

Card - 多对多 - Expension

您将获得:

Card - OneToMany - CardExpension - ManyToOne - Expension

另请阅读此 here in the Doctrine 2 documentation

Consequently, the direct many-to-many association disappears and is replaced by one-to-many/many-to-one associations between the 3 participating classes.