在这里使用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一起使用?如果是这样怎么样?或者有更好的方法来设计这个吗? 其他人在这种情况下做了什么?
答案 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