【发布时间】:2013-02-08 06:36:36
【问题描述】:
我有 region 实体和 regionEmploymentDetails、regionEducationDetails、regionPowerDetails 实体,它们保存了地区就业、教育和权力的详细信息。实体是分开的,因为它们拥有不同的数据。下面是类,
class Region
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
*@ORM\OneToOne(targetEntity="RegionEducationDetails")
@ORM\JoinColumn(name="region_id", referencedColumnName="id")
**/
private $education_details;
/**
*@ORM\OneToOne(targetEntity="RegionEmploymentDetails")
@ORM\JoinColumn(name="region_id", referencedColumnName="id")
**/
private $employment_details;
/**
*@ORM\OneToOne(targetEntity="RegionPowerDetails")
@ORM\JoinColumn(name="region_id", referencedColumnName="id")
**/
private $power_details;
}
class RegionEducationDetails
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var integer
*
* @ORM\Column(name="region_id", type="integer", length=20)
*/
private $region_id;
}
class RegionEmploymentDetails
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var integer
*
* @ORM\Column(name="region_id", type="integer")
*/
private $region_id;
}
class RegionPowerDetails
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var integer
*
* @ORM\Column(name="region_id", type="integer")
*/
private $region_id;
}
问题是当我使用命令生成架构时
php 应用程序/控制台原则:schema:update --force
它生成数据库表,但仅将 Region Entity 与 RegionPowserDetails Entity 关联,不关联其他实体。
它似乎只考虑最后一个映射,因此只与最后一个实体相关。如果我删除权力实体关系,它与权力之前的实体有关,即就业。
我做错了什么吗?这个问题有解决办法吗?
【问题讨论】:
-
您的 Region 实体中有 3 个相同的伪造密钥名称 - name="region_id"。数据库不会创建一个具有相同名称的外键的表。更改您的外键名称。
标签: php symfony doctrine one-to-one