Php 学说中的多重多人关系
一个简单的问题,但我找不到任何文档 我想将一个表连接到另两个表,在同一列上,具有相同类型的关系。非常简单: 我有一个地址表和一个用户表。非常简单,一个用户可以有多个地址: User.phpPhp 学说中的多重多人关系,php,doctrine-orm,foreign-keys,entity-relationship,Php,Doctrine Orm,Foreign Keys,Entity Relationship,一个简单的问题,但我找不到任何文档 我想将一个表连接到另两个表,在同一列上,具有相同类型的关系。非常简单: 我有一个地址表和一个用户表。非常简单,一个用户可以有多个地址: User.php /** * @OneToMany(targetEntity="Address", mappedBy="user", cascade={"persist", "remove"}) */ private $addresses; /** * @ManyToOne(targetEntity="User",
/**
* @OneToMany(targetEntity="Address", mappedBy="user", cascade={"persist", "remove"})
*/
private $addresses;
/**
* @ManyToOne(targetEntity="User", inversedBy="addresses")
*/
private $user;
/**
* @OneToMany(targetEntity="Address", mappedBy="**???**", cascade={"persist", "remove"})
*/
private $addresses;
Address.php
/**
* @OneToMany(targetEntity="Address", mappedBy="user", cascade={"persist", "remove"})
*/
private $addresses;
/**
* @ManyToOne(targetEntity="User", inversedBy="addresses")
*/
private $user;
/**
* @OneToMany(targetEntity="Address", mappedBy="**???**", cascade={"persist", "remove"})
*/
private $addresses;
现在我想添加一个新表,它也将使用地址(一个供应商可能也有许多地址)
Supplier.php
/**
* @OneToMany(targetEntity="Address", mappedBy="user", cascade={"persist", "remove"})
*/
private $addresses;
/**
* @ManyToOne(targetEntity="User", inversedBy="addresses")
*/
private $user;
/**
* @OneToMany(targetEntity="Address", mappedBy="**???**", cascade={"persist", "remove"})
*/
private $addresses;
显然,我不能按用户映射,因为这是从一个地址指向另一个用户。我想我可以在地址表中添加另一个外键,但我想知道是否有更好的方法来做到这一点,并继续为用户和地址使用相同的外键列。当存在双向关系时,您只需要指定一个
mappedBy
属性来确定哪一方是拥有方
从文档中:
- 双向关系既有拥有方也有反向方
- 单向关系只有一个拥有方
- 关系的拥有方确定对数据库中关系的更新
mappedBy
,您可以省略它
或者,您可以将供应商添加到Address类:
/**
* @ManyToOne(targetEntity="Supplier", inversedBy="addresses")
*/
private $supplier;
然后,您可以在supplier.php
/**
* @OneToMany(targetEntity="Address", mappedBy="supplier", cascade={"persist", "remove"})
*/
private $addresses;
我想你的回答的后半部分会有用的,我刚刚完成了一半。我试图避免这个额外的列,但我想这会在那里留下重复的外键,所以看起来它是必需的。