如何使用 Doctrine 从 JoinTable 映射
How to Mapping from JoinTable with Doctrine
我的 ERM/database 中有以下 table:
卡片、扩展和card_expansion
ManyToMany
-卡与扩展的关系。一张卡可以有很多扩展,一个扩展可以容纳很多卡。
合集
需要扩展多少张卡的描述。扩展 B 中的卡 A 需要 3 次。所以 OneToMany
与 card_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;
您可以将 Card
和 Expension
之间的关系设为实体 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.
我的 ERM/database 中有以下 table:
卡片、扩展和card_expansion
ManyToMany
-卡与扩展的关系。一张卡可以有很多扩展,一个扩展可以容纳很多卡。
合集
需要扩展多少张卡的描述。扩展 B 中的卡 A 需要 3 次。所以 OneToMany
与 card_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;
您可以将 Card
和 Expension
之间的关系设为实体 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.