我有这样的多级继承学说实体:
/**
* @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 文档中找到关于如何进行多级实体类继承的任何提及。