Доктрина 2.1 - Сопоставить сущность с несколькими таблицами - PullRequest
5 голосов
/ 26 августа 2011

У меня следующая ситуация с базой данных:

wp_users (user table generated by wordpress)
ID | user_login | ... 

wp_sp_user (extension to the wp_users table)
ID (FK) | surname | address | ... 

Теперь я уже часами пытаюсь "объединить" эти две таблицы в одну единую User сущность, например:

class User {
  var ID;
  var user_login;
  var surname;
  var address;
  ...
}

Есть ли способ выполнить такое отображение без изменения таблицы wp_user (что я не хочу делать по причинам обновления)?

Ответы [ 2 ]

16 голосов
/ 27 сентября 2013

Иногда рефакторинг базы данных невозможен, или у таблицы есть свой собственный "raison d'être". В этом случае вы можете использовать наследование. Ваш класс пользователя может продлить учетную запись. Подключите учетную запись к wp_users и добавьте в нее таблицу wp_sp_user. Пользовательский класс будет использовать столбцы двух таблиц.

Вот документация к доктрине:

https://www.doctrine -project.org / проекты / Доктрина-ОРМ / о / ток / ссылки / наследования mapping.html

0 голосов
/ 26 августа 2011

Это невозможно. Это тоже не имеет смысла.

Вам необходимо физически объединить таблицы в MySQL и создать сущность Doctrine для этой таблицы. Это единственный способ обеспечить чистоту и полную нормализацию ваших данных.

Другое возможное решение - создать одну сущность для каждой таблицы и использовать бизнес-объект для объединения результатов каждой. Это не очень хорошее решение, так как вам придется обрабатывать ограничения на прикладном уровне, и вы удвоите количество запускаемых вами запросов.

...