ПРИМЕЧАНИЕ: Тема длинная, но подробная и может пригодиться, если вы используете отношения Doctrine2 и oneToOne.
Недавно я столкнулся с проблемой в Doctrine:
Я создал объекты User и UserData с двунаправленным отношением oneToOne:
User:
...
oneToOne:
userdata:
targetEntity: UserData
mappedBy: user
UserData:
...
oneToOne:
user:
targetEntity: User
inversedBy: userdata
Таким образом, UserData был владельцем со столбцом user_id в нем:
user: id, ...
userdata: id, user_id, ...
Это создало проблему, где каждый раз, когда вы извлекаете объект пользователя (один пользователь, набор пользователей или набор других объектов, к которым присоединился пользователь), Doctrine будет лениво загружать объект пользователя для каждого пользователя.
Проблема, описанная здесь:
Предлагаемое решение описано здесь:
Таким образом, есть 3 способа обойти это:
Я решил остановиться на №3.Таким образом, мои отношения схемы теперь выглядят следующим образом:
User:
...
oneToOne:
userdata:
targetEntity: UserData
inversedBy: user
UserData:
...
oneToOne:
user:
targetEntity: User
mappedBy: userdata
Это означает, что мои таблицы теперь выглядят так:
user: id, userdata_id, ...
userdata: id, ...
Я решил, что вместо автоматического увеличения Userdata.id я установлю его вручную и сопоставлю с user.id. Это означает, что UserData.id всегда будет соответствовать user.id.
ВопросМожно ли использовать user.id (первичный автоматически увеличивающийся ключ) в качестве joinColum вместо userdata_id, поскольку они всегда будут иметь одно и то же значение? Видите ли вы какие-либо потенциальные проблемы с таким способом ведения дел?
Приветствуются любые другие советы или мнения по этому вопросу.