Сопоставление доктрины oneToOne одного объекта со многими другими объектами не связано с теми, что указаны в схеме базы данных.

У меня есть объект региона и регионEmploymentDetails, 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 приложение/консоль доктрина:схема:обновление --force

Он генерирует таблицы базы данных, но связывает сущность региона с сущностью только регионпоусердетаилс и не связывает другие сущности.

Кажется, он рассматривает только последнее сопоставление и поэтому относится только к последнему объекту. Если я удаляю отношение сущности Power, оно связано с сущностью, которая находится перед властью, то есть с занятостью.

Я делаю что-то не так? Есть ли решение этой проблемы?


person vishal    schedule 08.02.2013    source источник
comment
У вас есть 3 одинаковых имени форжинговых ключей в вашем объекте «Регион» — name=region_id. База данных не будет создавать одну таблицу с одинаковыми именами внешних ключей. Измените имена ваших внешних ключей.   -  person Daniel Korsak    schedule 08.02.2013


Ответы (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;

}
person vishal    schedule 08.02.2013