多个实体关系之一

时间:2018-10-11 12:45:31

标签: symfony symfony-forms symfony4

在Symfony 4上,我有一个实体(地址),可以与 ONE 个实体中的一个关联:客户,联系人,员工等。

我本质上是想在Address中具有“ entity_type”和“ entity_id”列,但是由于我仍然希望能够使用Forms ... etc,因此我不确定这是否是最好的处理方法。

2 个答案:

答案 0 :(得分:0)

是的,您可以那样做。但是,这将限制与多个实体(例如contactsemployees等)共享一个地址的能力(除非复制记录)。但是,如果一个地址记录从未与多个实体共享,则可以继续执行该操作。

让第三张表保存addressemployeescontacts等之间的映射怎么样?假设有一个名为entity_address的新表,结构看起来像这样,

  • id
  • entity_id
  • 实体名称
  • address_id(地址表ID列的外键)

由于我在第一段中提到的原因,我个人更喜欢这种方法,而不是让address表具有entity_identity_name

说过,其他人可能有不同的方法。

无论如何,很高兴为您提供帮助:)

答案 1 :(得分:0)

您可以考虑与对方的关系。

一个帐户可以有许多地址。一个联系人可以有许多地址。员工可以有很多地址。

这是一个多对多的单向关系。

您可以在目标实体中而不是在一个地址中建立关系。

class Accounts
{
    // ...

    /*
     * @ORM\ManyToMany(targetEntity="Address")
     * @ORM\JoinTable
     * (
     *     name="accounts_addresses",
     *     joinColumns=
     *     {
     *         @ORM\JoinColumn(name="account_id", referencedColumnName="id")
     *     },
     *     inverseJoinColumns=
     *     {
     *         @ORM\JoinColumn(name="address_id", referencedColumnName="id", unique=true)
     *     }
     * )
     */
    private $addresses;

    // ...
}

// And so on for the others entities

这将在您的数据库中建立一个对address_id外键具有唯一约束的关系表。

有关更多信息,请查看this