vishal
vishal

Reputation: 4083

doctrine oneToOne mapping of one entity with many other entities do not relate those in database schema

I have region entity and regionEmploymentDetails, regionEducationDetails, regionPowerDetails entities which hold regions employment, education and power details. Entities are kept separate because they hold different data. Below are classes,

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;
}

The problem is when I generate schema using command

php app/console doctrine:schema:update --force

It generate database tables but relates Region Entity with Only RegionPowserDetails Entity and does not relate other entities.

It seems it considers only the last mapping and so relates only with the last entity. If I remove Power entity relation it relates with Entity which is before power i.e Employment.

Am I doing anything wrong ? Is there any solution to this problem ?

Upvotes: 2

Views: 1699

Answers (1)

vishal
vishal

Reputation: 4083

The region class should be,

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;

}

Upvotes: 1

Related Questions