У меня есть многоуровневая доктрина наследования, подобная этой:
/**
* @ORM\Entity
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="type", type="string")
* @ORM\DiscriminatorMap({"customer" = "CustomerUser",
* "admin" = "AdminUser", "stock" = "StockUser"})
*/
abstract class User { ... }
/** @ORM\Entity */
abstract class EmployeeUser extends User { ... }
/** @ORM\Entity */
class AdminUser extends EmployeeUser { ... }
/** @ORM\Entity */
class StockUser extends EmployeeUser { ... }
Однако это не работает, поля EmployeeUser не считываются из базы данных и не сохраняются.
Я обнаружил, что это работает, когда я указываю карту дискриминатора следующим образом:
* @ORM\DiscriminatorMap({"customer" = "CustomerUser",
* "admin" = "AdminUser", "stock" = "StockUser", "EmployeeUser"})
он начинает работать таким образом (нет необходимости указывать ключ дискриминатора для EmployeeUser - поскольку он абстрактен и никогда не будет инстанцирован), но
Мне не нравится, когда происходит волшебство, которого я недостаточно понимаю :) поэтому мой вопрос: правильное ли это решение? Просто сообщить Doctrine таким образом, что этот класс каким-то образом включен в иерархию наследования? Или это нужно сделать как-то иначе?
Я не нашел упоминания о том, как выполнять многоуровневое наследование классов сущностей в документах Doctrine.
, "employee" = "EmployeeUser"
вDiscriminatorMap
? Возможно, Doctrine требует дискриминатора для каждой дочерней сущности. Во всяком случае, я не знаю, поддерживается ли наследование с несколькими уровнями, разве вы не можете использовать только 2 уровня? - person A.L   schedule 20.02.2016