主义和多个实体关联

时间:2014-01-30 01:13:13

标签: entity-framework symfony doctrine-orm doctrine doctrine-odm

在这里使用Doctrine 2和Symfony。我对Doctrine很新,无法在他们的文档中找到我正在寻找的内容,所以我正在寻找有关情况的一些指导。

我有这些实体: 1.个人资料(一个人的个人资料,一个人可以有多个地址) 2.学校(学校信息,学校可以有很多地址) 3.地址(所有地址,与上述实体之一相关)

以前,我有Profile,ProfileAddress,School,SchoolAddress,它运行良好,但我宁愿有一个类/表来进行地址更新,因为我可能会得到其他需要地址的实体。此外,如果我的地址格式发生变化,我只想更改一个类/表而不是更多。

我的问题是......是否有可能将两个(或更多)不同的实体关联到一个实体?以下是我将在实际表格中看到的数据示例。

-Profiles -

|id|fname |lname|
| 1|John  |Smith|
| 2|Jane  |Jones|

-Schools -

|id|name             |type             |
| 1|City College     |University       |
| 2|Greendale        |Community College|

-Addresses -

|id|src_id|src     |type    |address1          |address2|
| 1|     1|profiles|maling  |PO BOX 555        |        |
| 2|     1|profiles|physical|123 W. Main St.   |Apt A   |
| 3|     1|schools |physical|541 University Way|        |
| 4|     2|schools |physical|111 Winger Ave    |        |

这是否可以与Doctrine一起使用?如果是这样怎么样?或者有更好的方法来设计这个吗? 其他人在这种情况下做了什么?

2 个答案:

答案 0 :(得分:3)

很可能,您只需要2个映射表,因此您不需要在地址中使用源列,而是拥有profile_address和school_address表。您需要指定从配置文件到地址以及从学校到地址的单向(单向)。

编辑:

在给予用户角色的标准示例中:

/**
 * @ORM\ManyToMany(targetEntity="Role")
 * @ORM\JoinTable(name="user_role",
 *     joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
 *     inverseJoinColumns={@ORM\JoinColumn(name="role_id", referencedColumnName="id")}
 * )
 */
protected $roles;

现在可以说你想要另一个对象,让我们说旁观者你也想拥有角色,你会有:

/**
 * @ORM\ManyToMany(targetEntity="Role")
 * @ORM\JoinTable(name="bystander_role",
 *     joinColumns={@ORM\JoinColumn(name="bystander_id", referencedColumnName="id")},
 *     inverseJoinColumns={@ORM\JoinColumn(name="role_id", referencedColumnName="id")}
 * )
 */
protected $roles;

这就是它的全部内容。

答案 1 :(得分:0)

看起来我只是不知道要使用的正确单词。 我找到了Doctrine的MappedSuperClass和/或单表继承的文档,它有我需要的东西。

此处的文档:http://docs.doctrine-project.org/en/latest/reference/inheritance-mapping.html