Вы можете определить ассоциации «OneToOne» для каждой таблицы сведений о проекте:
/**
* @OneToOne(targetEntity="ProjectDetails1")
* @JoinColumn(name="project_details_id", referencedColumnName="id")
*/
private $projectDetails1;
/**
* @OneToOne(targetEntity="ProjectDetails2")
* @JoinColumn(name="project_details_id", referencedColumnName="id")
*/
private $projectDetails2;
Добавьте другие таблицы сведений о проекте. Затем используйте функцию получения, чтобы получить правильное отношение на основе типа:
function getProjectDetails() {
if($this->type === 'type1') {
return $this->projectDetails1;
}
elseif($this->type === 'type2') {
return $this->projectDetails2;
}
}
Обновление: в этом случае вы не можете использовать консольный инструмент доктрины для создания своих ассоциаций, так как будет невозможно установить внешний ключ для "project_details_id" для 2 разных таблиц.
Чтобы решить эту проблему, столбец project_details_id целочисленного типа должен быть создан с помощью миграции или вы можете определить поле в объекте Project:
/**
* @ORM\Column(type="integer", nullable=true)
*/
private $projectDetailsId;
сгенерируйте и запустите миграцию. Наконец, замените последнее поле приведенными выше ассоциациями.
person
Jannes Botis
schedule
18.09.2017