2014-01-30 190 views
2

在这里使用Doctrine 2和Symfony。我对Doctrine相当陌生,无法在他们的文档中找到我要找的内容,所以我正在寻找一些有关情况的指导。学说和多个实体关联

我有这些实体: 1.简介(一个人的轮廓,一个人可以有多个地址) 2.学校(学校信息,学校可以有多个地址) 3.地址(所有地址,关联到上述实体之一)

以前,我有配置文件,ProfileAddress,学校,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 |  | 

这是可能的教义?如果是这样的话?还是有更好的方法可以设计出来? 在这种情况下别人做了什么?

+0

有具有参考表的好处:学说会认为它如果它匹配了实体的配置是否正确。实体被正确保存。所以不需要创建参考表的实体。易如反掌。 – geoB

回答

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; 

这就是它的全部。

+0

这是很好的知道它的可能性。我的问题是如何?我没有在文档中找到任何内容,但也许我正在寻找错误的地方。您知道的任何示例或文档? – Bob

+0

刚刚为你举了一个例子。 –