Here,有关于“如何从现有数据库生成实体”的解释。
我有一张桌子person
。表格address
。一个人可以有许多不同的地址,一个地址可以与一个或多个人相关。所以这是一个“多对多”的关系。因此,我创建了一个“中间”表,我称之为personaddress
,其中有一个idPersonne和idAddress。
当启动这一代时,一切都很好但是多对多的关系(不止一个)。
PersonneAdresse:
type: entity
table: personne_adresse
fields:
id:
id: true
type: bigint
nullable: false
generator:
strategy: IDENTITY
manyToOne:
idPersonne:
targetEntity: Personne
cascade: { }
mappedBy: null
inversedBy: null
joinColumns:
id_personne:
referencedColumnName: id
orphanRemoval: false
idAdresse:
targetEntity: Adresse
cascade: { }
mappedBy: null
inversedBy: null
joinColumns:
id_adresse:
referencedColumnName: id
orphanRemoval: false
lifecycleCallbacks: { }
关于oneToMany的文档是不够的(我需要一个例子来理解):
如果您的实体之间存在oneToMany关系,那么您将会这样做 需要编辑生成的xml或yml文件以在其上添加一个部分 定义
oneToMany
和inversedBy
的{{1}}的特定实体mappedBy
件。
而且我很确定修改不仅仅是关于oneToMany,还有很多也是很多。 你能解释一下我应该做什么/修改什么才能正确生成相应的实体?
答案 0 :(得分:0)
这就是我做的事情:我已经生成了整个文件,但我知道有一些ManyToMany关系。所以我在相应的文件中“手动”声明它们。然后我遇到了另一个问题。在文档中,代码示例不是100%正确。您必须添加“@ORM\
”而不是简单的“@
”。这里我的代码有效:
/**
* @ORM\ManyToMany(targetEntity="Adresse", inversedBy="personnes")
* @ORM\JoinTable(name="personne_adresse")
**/
private $adresses;
/**
* @ORM\ManyToMany(targetEntity="Partenaire", inversedBy="personnes")
* @ORM\JoinTable(name="personne_partenaire")
**/
private $partenaires;
/**
* @ORM\ManyToMany(targetEntity="Telephone", inversedBy="personnes")
* @ORM\JoinTable(name="personne_telephone")
**/
private $telephones;
public function __construct() {
$this->adresses = new \Doctrine\Common\Collections\ArrayCollection();
$this->partenaires = new \Doctrine\Common\Collections\ArrayCollection();
$this->telephones = new \Doctrine\Common\Collections\ArrayCollection();
}
此外,你必须删除相应的ManyToMany Php文件,因为Symfony 2(我猜)处理那些“中间”ManyToMany表本身=>无需申报。在我的示例中,我不得不删除“PersonneAdresse.php
”,“PersonnePartenaire.php
”和“PersonneTelephone.php
”。