Symfony2 Doctrine2 -通过doctrine:mapping:import从现有数据库生成多对多注释


Symfony2 Doctrine2 - generate Many-To-Many annotation from existing database by doctrine:mapping:import

我想通过使用Doctrine工具进行逆向工程,从现有的数据库生成实体

您可以通过执行以下两个命令要求Doctrine导入模式并构建相关的实体类。

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

但是现在学说只检测多侧"ProviderCountry"表中的ManyToOne关系

如果我需要添加manymany关系,我必须通过添加以下注释来手动添加注释

in Country.php add

/**
 * 
 * @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]

可以通过在

中添加以下行来实现

供应商/理论/orm/lib/理论/orm映射/司机/DatabaseDriver.php

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

inside __construct

public function __construct(AbstractSchemaManager $schemaManager)

注意:那会覆盖OneToMany注释。

我不建议您修改供应商。您应该修改您的模式,然后生成实体和数据库。

在你的例子中,我会在你从数据库

生成模式后修改它

Symfony2 Jobeet - The Data Model

manyToMany:
    affiliates:
        targetEntity: Affiliate
        mappedBy: categories
manyToMany:
        categories:
            targetEntity: Category
            joinTable:
                name: category_affiliate
                joinColumns:
                    affiliate_id:
                        referencedColumnName: id
                inverseJoinColumns:
                    category_id:
                        referencedColumnName: id