我有4个实体(地址,用户,联系人,帐户)。用户,联系人和帐户中的每条记录都可以有多个地址。我所做的是:
/**
* Address
*
* @ORM\Table(name="address")
* @ORM\Entity
*/
class Address
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var integer
*
* @ORM\Column(name="join_id", type="integer")
*/
private $joinId;
/**
* @var string
*
* @ORM\Column(name="join_type", type="string", length=16)
*/
private $joinType;
........
}
因此,作为join_type,我正在保存USER,CONTACT或ACCOUNT,而作为join_id,我将保存用户,联系人和帐户实体中相关记录的ID。
有没有办法以某种方式使用关系来做到这一点,所以我不需要运行额外的查询来获取地址,保存它会更容易吗?
答案 0 :(得分:4)
我认为Doctrine单表继承(http://doctrine-orm.readthedocs.org/en/latest/reference/inheritance-mapping.html#single-table-inheritance)正是您所需要的。所以,你将拥有一个顶层实体 - 地址&每个关系的3个扩展实体 - UserAddress,ContactAddress,AccountAddress。只需在Address实体定义所有公共属性,关系定义就会移到继承实体。