【问题标题】:doctrine oneToOne mapping of one entity with many other entities do not relate those in database schema一个实体与许多其他实体的原则 oneToOne 映射与数据库模式中的那些不相关
【发布时间】: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


【解决方案1】:

区域类应该是,

class Region {

/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;


private $education_details_id;

/**
 *@ORM\OneToOne(targetEntity="RegionEducationDetails")
  @ORM\JoinColumn(name="education_details_id", referencedColumnName="id")
**/

private $education_details;


private $employment_details_id; 

/**
 *@ORM\OneToOne(targetEntity="RegionEmploymentDetails")
  @ORM\JoinColumn(name="employment_details_id", referencedColumnName="id")
**/

private $employment_details; 


private $power_details_id;

/**
 *@ORM\OneToOne(targetEntity="RegionPowerDetails")
  @ORM\JoinColumn(name="power_details_id", referencedColumnName="id")
**/

private $power_details;

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-03
    • 2016-08-05
    • 2018-06-07
    • 2013-08-18
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多