【发布时间】:2016-02-18 19:56:15
【问题描述】:
我有这样的多级继承学说实体:
/**
* @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 文档中没有找到任何关于如何进行多级实体类继承的提及。
【问题讨论】:
-
看起来不错。如果在
DiscriminatorMap中定义, "employee" = "EmployeeUser"会怎样?也许 Doctrine 要求每个子实体都有一个鉴别器。反正我不知道是否支持多级继承,不能只用2级吗?
标签: php inheritance doctrine-orm doctrine nette