在Symfony 4上,我有一个实体(地址),可以与 ONE 个实体中的一个关联:客户,联系人,员工等。
我本质上是想在Address中具有“ entity_type”和“ entity_id”列,但是由于我仍然希望能够使用Forms ... etc,因此我不确定这是否是最好的处理方法。>
答案 0 :(得分:0)
是的,您可以那样做。但是,这将限制与多个实体(例如contacts
,employees
等)共享一个地址的能力(除非复制记录)。但是,如果一个地址记录从未与多个实体共享,则可以继续执行该操作。
让第三张表保存address
与employees
,contacts
等之间的映射怎么样?假设有一个名为entity_address
的新表,结构看起来像这样,
由于我在第一段中提到的原因,我个人更喜欢这种方法,而不是让address
表具有entity_id
和entity_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