0

在这里,有一个关于“如何从现有数据库生成实体”的解释。

我有一张桌子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定义 theinversedBymappedBypieces。

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

4

1 回答 1

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

于 2013-02-11T12:26:57.957 回答