我想通过使用Doctrine工具进行逆向工程来从现有数据库生成实体
您可以通过执行以下两个命令,让Doctrine导入架构并构建相关的实体类。
1 $ php app/console doctrine:mapping:import AcmeBlogBundle annotation
2 $ php app/console doctrine:generate:entities AcmeBlogBundle
但是现在该学说仅在很多方面仅检测到ManyToOne关系“ProviderCountry”表
如果我需要添加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]
提前致谢。
答案 0 :(得分:2)
您可以通过在
中添加以下行来完成此操作供应商/教义/ 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);
在__construct里面
public function __construct(AbstractSchemaManager $schemaManager)
注意:的 这将覆盖OneToMany注释。
答案 1 :(得分:0)
我不建议您修改供应商。 您应该修改架构并在之后生成实体和数据库。
在你的情况下,我会在你从数据库
生成模式后修改模式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