如何从JoinTable映射到Doctrine

时间:2016-01-17 14:08:11

标签: php orm doctrine-orm doctrine one-to-many

我的ERM /数据库中有以下表格:

展开 card_expansion
ManyToMany - 卡与扩展之间的关系。一张卡可以进行多次扩展,扩展可以容纳许多卡。

集合
描述需要扩展的卡数。扩展B的卡A需要3次。因此OneToManycard_expansioncard_expansion的关系。

我想使用Doctrine在我的Entities-objects中映射这些关系。卡和扩展之间的映射是没有问题的。 但由于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; 实体

string request_url =
                 "https://www.tumblr.com/oauth/access_token" + "?" +
                 "oauth_consumer_key=" + oauth_consumer_key + "&" +
                 "oauth_token=" + main_oauth_token + "&" +
                 "oauth_signature_method=" + "HMAC-SHA1" + "&" +
                 "oauth_signature=" + Uri.EscapeDataString(oauth_signature) + "&" +
                 "oauth_timestamp=" + oauth_timestamp + "&" +
                 "oauth_nonce=" + oauth_nonce + "&" +
                 "oauth_version=" + "1.0" + "&" +
                 "oauth_verifier=" + oauth_verifier;

                HttpClient httpClient = new HttpClient();
                string responseBodyAsText = await httpClient.GetStringAsync(request_url);

1 个答案:

答案 0 :(得分:1)

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

而不是遵循:

Card - ManyToMany - Expension

你会得到:

Card - OneToMany - CardExpension - ManyToOne - Expension

另请阅读here in the Doctrine 2 documentation

  

因此,直接的多对多关联消失,并被3个参与类之间的一对多/多对一关联所取代。