Задать вопрос

Как связать 2 Entity в Doctrine2 не по первичному ключу?

Есть база данных, которую нельзя менять. И в ней есть таблица users с пользователями и их паролями и таблица userprofile с их именами и прочим. Связаны они (почему-то) не по первичному ключу, а по email. Нужно в Entity User получить значение поля name из таблицы userprofile. Базу проектировал не я и она используется для других приложений - так что поменять я её не могу. Я пришел к выводу, что нужно либо:
1) Добавить колонку profile_name и прописать связи между двумя Entity. Я сделал это так:
/**
* @ORM\OneToOne(targetEntity="UserProfile")
* @ORM\JoinColumn(name="name", referencedColumnName="email")
*/
private $profile_name;

Но symfony2 при выполнении выдает ошибку
The referenced column name 'email' has to be a primary key column on the target entity class 'AppBundle\Entity\UserProfile'.

либо 2) Вызвать каким-то образом EntityManager из Entity и получить обычным способом нужное поле, но я также ни одного рабочего способа это сделать не нашёл (переопределять конструктор Symfony2 не дает)
Помогите решить проблему
  • Вопрос задан
  • 793 просмотра
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
Preemiere
@Preemiere
Symfony developer
Every entity class must have an identifier/primary key.
docs.doctrine-project.org/en/latest/reference/basi...

28.1.1. Join-Columns with non-primary keys
It is not possible to use join columns pointing to non-primary keys.
doctrine-orm.readthedocs.org/projects/doctrine-orm...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы