gpt4 book ai didi

Doctrine 2 具有三个实体和一个连接表的多对多

转载 作者:行者123 更新时间:2023-12-02 21:13:06 25 4
gpt4 key购买 nike

我有3张 table

People
- id -pk
- name

Roles
- id -pk
- roleName

Events
- id -pk
- title

和一个连接表

event_performers
- event_id -pk
- role_id -pk
- people_id -pk

一个事件有很多角色。角色由人员执行。一个角色与许多事件相关联。一个人可以扮演多种角色。

所以我想要的是,当我收到一个事件时,我可以访问与该事件相关的角色集合,并且从角色中我可以获取执行该角色的人员。

我不确定如何将其映射到 Doctrine 2 中?

最佳答案

大约一周前我遇到了同样的问题。我向 Doctrine IRC channel 用户进行了民意调查,寻找最佳解决方案(或者至少是最常用的解决方案)。其实现方式如下:

创建一个名为 EventsPeopleRoles 之类的新实体,并使用 @ManyToOne、$event、$person 和 $role 映射三个属性。

每个关联的映射应与此类似:

/**
* @ManyToOne(targetEntity="Events", inversedBy="eventsPeopleRoles")
* @JoinColumn(name="event_id", referencedColumnName="id", nullable=false)
*/
private $event;

然后在三个相关实体中的每一个中,对关联的反面进行编码,如下所示:

/**
* @OneToMany(targetEntity="EventsPeopleRoles", mappedBy="event")
*/
private $eventsPeopleRoles;

然后,您可以选择将 $id 属性添加到“连接实体”或使用复合主键,如here所述。并在实体类定义中添加唯一约束注释。请注意,仅从 Doctrine 2.1 开始才支持复合外键。

我对此解决方案持怀疑态度,因为我不喜欢仅出于连接目的而创建实体的想法。这看起来像是作弊,或者至少与 ORM 设计 Doctrine 相反。但我相信这是 Doctrine 专家们公认的解决方案(至少目前如此)。

关于 Doctrine 2 具有三个实体和一个连接表的多对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7903773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com