从现有数据库生成实体时,如何修改/创建manyToMany

时间:2013-02-08 22:53:32

标签: symfony doctrine

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文件以在其上添加一个部分   定义oneToManyinversedBy的{​​{1}}的特定实体   mappedBy件。

而且我很确定修改不仅仅是关于oneToMany,还有很多也是很多。 你能解释一下我应该做什么/修改什么才能正确生成相应的实体?

1 个答案:

答案 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”。