Symfony 一对多、多对多等的定义

Symfony 一对多、多对多等的定义,symfony,doctrine-orm,Symfony,Doctrine Orm,我正在使用Doctrine2构建一个数据库应用程序。我被外键映射弄糊涂了。我想知道,这些例子是否正确: 一对一:一个X正好有一个Y 一对多:一个X可以有多个Ys 多对一:多个Xs可以具有相同的Y 多对多:MultipleXs可以有多个Ys 这就是让我困惑的具体情况: 一个用户正好有一个家乡。许多用户可能属于同一个家乡,因此用户的链接为: /** * @ORM\ManyToOne(targetEntity="HomeTown", inversedBy="localUsers") */ $hom

我正在使用Doctrine2构建一个数据库应用程序。我被外键映射弄糊涂了。我想知道,这些例子是否正确:

一对一:
一个
X
正好有一个
Y

一对多:
一个
X
可以有多个
Y
s

多对一:
多个
X
s可以具有相同的
Y

多对多:
Multiple
X
s可以有多个
Y
s

这就是让我困惑的具体情况: 一个
用户
正好有一个
家乡
。许多用户可能属于同一个家乡,因此
用户的链接为:

/**
 * @ORM\ManyToOne(targetEntity="HomeTown", inversedBy="localUsers")
 */
$homeTown;
并且,相应的
家乡
链接是:

/**
 * @ORM\ManyToMany(targetEntity="User", mappedBy="homeTown")
 */
$localUsers;
还是:

/**
 * @ORM\OneToMany(targetEntity="User", mappedBy="homeTown")
 */
$localUsers;
如能澄清,将不胜感激


我一直在研究当你有
OneToMany
关联时,倒转的必须是
manytone
。这么说来,你的第二个选择是正确的

提示:使用命令CLI
orm:validate schema
也可能有助于识别此问题


Symfony应用程序中的完整路径:
php应用程序/控制台原则:schema:validate

如果您希望一个城市有多个用户,映射应如下所示

Entity City
/**
 * @ORM\OneToMany(targetEntity="User", mappedBy="homeTown")
 */
private $users;
...
public function __construct()
{
    $this->users = new ArrayCollection();
}
...

Entity User
/**
 * @ORM\ManyToOne(targetEntity="User", inversedBy="users")
 * @ORm\JoinColumn(name="home_town", referencedColumnName="id")
 */
private $homeTown;
该映射向我们显示,拥有方所在的城市与用户(目标实体)有着非常密切的关系。由于多个用户具有相同的城市,因此需要分别用多个一元关系对反向侧的用户进行注释。当然,这里的目标实体应该是城市。在JoinColumn注释中指定哪个列指向具有referencedColumnName属性的foreignkey非常重要。它显示其他表的哪一列指向该键。在这个示例中,在表User中有一个名为“home_town”的列,它是一个外键,指向表City的列id

在许多关系中,应该使用JoinColumn注释

这种映射也是双向的


您可以将id设置为单向,就像在用户实体中不使用“inversedBy=”属性一样,并从城市实体中删除带有$User属性的OneToMany注释。这就像你必须知道某个特定用户的城市,但你不需要知道某个特定城市的所有用户一样

谢谢!我想得越多,就越觉得是这样。也谢谢你的CLI提示。对于其他人:如果您使用的是symfony2,那么命令是:
php应用程序/控制台原则:schema:validate
。太好了!我已使用Symfony的完整路径命令更新了我的响应。这是很好的小费!