Доктрина 2.1 - Сопоставить сущность с несколькими таблицами

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

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 ответа

Решение

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

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

http://docs.doctrine-project.org/en/latest/reference/inheritance-mapping.html

Это невозможно. Это также не имеет смысла делать это.

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

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

Другие вопросы по тегам