3

リバース エンジニアリング用の Doctrine ツールを使用して、既存のデータベースからエンティティを生成したい

次の 2 つのコマンドを実行して、スキーマをインポートし、関連するエンティティ クラスを構築するように Doctrine に依頼できます。

1 $ php app/console doctrine:mapping:import AcmeBlogBundle annotation
2 $php app/console doctrine:generate:entities AcmeBlogBundle

しかし、今ではドクトリンは多面のみの「ProviderCountry」テーブルでManyToOne関係のみを検出します

ManyToMany リレーションを追加する必要がある場合は、次の注釈を追加して、手で注釈を追加する必要があります

Country.phpに追加

/**
 * 
 * @var Provider $provider
 * 
 * @ORM\ManyToMany(targetEntity="Provider")
 * @ORM\JoinTable(name="provider_country",
 *      joinColumns={@ORM\JoinColumn(name="countryId", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="providerId", referencedColumnName="id")}
 *      )
 * */
private $providers;

Provider.phpに追加

  /**
     * @var Country $country
     * 
     * @ORM\ManyToMany(targetEntity="Country")
     * @ORM\JoinTable(name="provider_country",
     *      joinColumns={@ORM\JoinColumn(name="providerId", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="countryId", referencedColumnName="id")}
     *      )
     * */
    private $countrys;

doctrine コマンド [doctrine:mapping:import] で多対多のアノテーションを生成するにはどうすればよいですか?

前もって感謝します。

4

2 に答える 2

2

これを行うには、次の行を追加します

ベンダー/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php

 $tables = array();
    $tables[] = $schemaManager->listTableDetails("country");
    $tables[] = $schemaManager->listTableDetails("provider_country");
    $tables[] = $schemaManager->listTableDetails("provider");
    $this->setTables($schemaManager->listTables(), $tables);

__construct内

public function __construct(AbstractSchemaManager $schemaManager)

注: これにより、OneToManyアノテーションがオーバーライドされます。

于 2013-03-18T10:30:45.087 に答える