Symfony2和Doctrine2:4个表之间的2个字段的关系

时间:2014-03-16 09:13:21

标签: symfony inheritance doctrine-orm relational-database

我有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。

有没有办法以某种方式使用关系来做到这一点,所以我不需要运行额外的查询来获取地址,保存它会更容易吗?

1 个答案:

答案 0 :(得分:4)

我认为Doctrine单表继承(http://doctrine-orm.readthedocs.org/en/latest/reference/inheritance-mapping.html#single-table-inheritance)正是您所需要的。所以,你将拥有一个顶层实体 - 地址&每个关系的3个扩展实体 - UserAddress,ContactAddress,AccountAddress。只需在Address实体定义所有公共属性,关系定义就会移到继承实体。