Doctrine orm 从多个实体到一个实体的多个实体

Doctrine orm 从多个实体到一个实体的多个实体,doctrine-orm,symfony,Doctrine Orm,Symfony,我有3个实体: 客户 公司 接触 客户实体可以有多个联系人实体,公司也可以有多个联系人实体 联系人实体如下所示: class ContactDetail { use Timestampable; use Bleamable; CONST TYPE_EMAIL = 'EMAIL'; CONST TYPE_PHONE = 'PHONE'; CONST TYPE_FAX = 'FAX'; CONST TYPE_MOBILE = 'MOBILE';

我有3个实体:

  • 客户
  • 公司
  • 接触
客户
实体可以有多个
联系人
实体,公司也可以有多个
联系人
实体

联系人
实体如下所示:

class ContactDetail
{
    use Timestampable;
    use Bleamable;

    CONST TYPE_EMAIL = 'EMAIL';
    CONST TYPE_PHONE = 'PHONE';
    CONST TYPE_FAX = 'FAX';
    CONST TYPE_MOBILE = 'MOBILE';

    /**
     * @ORM\Id
     * @ORM\Column(type="integer", options={"unsigned"=true})
     * @ORM\GeneratedValue(strategy="AUTO")
     * @Expose
     * @JMS\Groups({"ROLE_USER","ROLE_ADMIN"})
     */
    private $id;

    /**
     * @var string
     * @Assert\NotNull()
     * @ORM\Column(type="string", columnDefinition="ENUM('EMAIL', 'PHONE', 'FAX', 'MOBILE')", nullable=false)
     * @Expose
     * @JMS\Groups({"ROLE_USER","ROLE_ADMIN"})
     */
    private $type;

    /**
     * @var string
     * @ORM\Column(type="string", nullable=false)
     * @Assert\NotBlank(message="Please enter proper value")
     * @Expose
     * @JMS\Groups({"ROLE_USER","ROLE_ADMIN"})
     */
    private $value;
   (...)
   }
问题是:

我是否应该这样做:

客户
实体:

/**
 * @ORM\OneToMany(targetEntity="CoreBundle\Entity\ContactDetail", mappedBy="client")
 * @ORM\JoinColumn(name="contactDetail", referencedColumnName="id")
 */
protected $contactDetails;
/**
 * @ORM\OneToMany(targetEntity="CoreBundle\Entity\ContactDetail", mappedBy="company")
 * @ORM\JoinColumn(name="contactDetail", referencedColumnName="id")
 */
protected $contactDetails;
公司
实体:

/**
 * @ORM\OneToMany(targetEntity="CoreBundle\Entity\ContactDetail", mappedBy="client")
 * @ORM\JoinColumn(name="contactDetail", referencedColumnName="id")
 */
protected $contactDetails;
/**
 * @ORM\OneToMany(targetEntity="CoreBundle\Entity\ContactDetail", mappedBy="company")
 * @ORM\JoinColumn(name="contactDetail", referencedColumnName="id")
 */
protected $contactDetails;
这将在联系人实体中创建两个附加列(公司和客户),还是我应该以其他方式创建

前。 创建两列:
entityName
entityId
,并以某种方式将其绑定到
客户端
公司

如果第二种方法是正确的,请告诉我如何实现这一点。

考虑使用客户和公司的单向地图来联系解决这一问题。在这种情况下,这是一个小技巧,因为如果不使用mappedBy和映射此双向关系,就无法创建
OneToMany
关系,因此联系人需要有这两列,一列为客户,另一列为公司

照顾好孩子,解决办法可能有点奇怪。这是一种来自客户和公司的多人单向关系。而且,您不需要在客户机或联系的公司网络中有外键。但必须创建一个新表来中介此关系


简单的方法是为表“客户联系人”和其他“公司联系人”中的每个关系创建一个表,每个表都有to列,一个用于客户id/公司id,另一个用于联系人id。col

考虑使用从客户和公司到联系人的单向映射来解决这个问题。在这种情况下,这是一个小技巧,因为如果不使用mappedBy和映射此双向关系,就无法创建
OneToMany
关系,因此联系人需要有这两列,一列为客户,另一列为公司

照顾好孩子,解决办法可能有点奇怪。这是一种来自客户和公司的多人单向关系。而且,您不需要在客户机或联系的公司网络中有外键。但必须创建一个新表来中介此关系


简单的方法是为表“客户联系人”和其他“公司联系人”中的每个关系创建一个表,每个表都有to列,一个表用于客户id/公司id,另一个表用于联系人id。col

除非一个联系人可以为多个客户或多个公司工作(根据职业的不同,一个联系人经常会为多个客户工作),则联系人应提及其工作的客户和/或公司。如果客户可以为多个客户工作,则应存在一个中间实体,将每个联系人与其客户和公司联系起来。请注意,公司通常有多个联系人。通常,除非您知道关系始终为1,否则请使用n保持关系的中间连接。除非一个联系人可以为多个客户或多个公司工作(取决于职业,一个联系人通常会为多个客户工作),则联系人应提及其工作的客户和/或公司。如果客户可以为多个客户工作,则应存在一个中间实体,将每个联系人与其客户和公司联系起来。请注意,公司通常有多个联系人。通常,除非您知道关系始终为1,否则请使用n用于保持关系的中间连接。