0

ここでは、「既存のデータベースからエンティティを生成する方法」について説明しています。

私はテーブルを持っていますperson。そしてテーブルaddress。人は多くの異なる住所を持つことができ、住所は 1 人または複数の人に関連付けることができます。つまり、これは「多対多」の関係です。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定義する特定のエンティティにセクションを追加する必要があります。inversedBymappedBy

そして、変更は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 に答える