Doctrine 1.2类表继承的解决方法?

时间:2011-03-23 19:49:12

标签: php inheritance orm doctrine single-table-inheritance


好的,首先,我知道1.2。这是不可能的,这就是为什么我正在寻找一种解决方法 不,不幸的是我无法使用Doctrine 2,因为我的共享托管服务器停留在PHP 5.2.16,并且管理员拒绝安装PHP 5.3支持。

所以,这是我的问题,基本的亲子问题:
假设我有一个基类User和子类CustomerSellerAdmin

我一直在研究继承方法:简单(相当无用的IMO),具体列聚合,甚至是一种解决方法“假类表继承”找到here

我真正需要的是“类表继承”,换句话说,User映射到包含所有共享值的单独表,子表将map定义为仅定义表的单独表他们的具体专栏。

我放弃了 perfection :)在PHP< 5.3中,我真的不在乎它将如何存储在db中,但我的对象模型需要具备所有功能。

那么解决方法的最佳选择是什么?

这就是我需要的。

  • 具有共享值的基类定义(名称,用户名,密码,地址......)
  • 包含所有值(共享及其特定)的子类
  • 子类只应查看其变量,而不是其他子类(例如,客户不应定义workingHours,这是卖方特定的值)
  • 我必须能够在基类和单独的子类上形成关系,并且这些关系必须绑定到特定的类(例如,User类必须与Address类有关系,Restourant class必须与Orders类有关系,Restourant也必须定义Address关系......但Admin不能有Orders关系,因为他与订单无关)

查询基表也不错,但正如我所知,这是最大的问题之一,它不是必须的。

我希望你理解我的问题。任何建议都会受到赞赏,因为我真的不知道该怎么做。

1 个答案:

答案 0 :(得分:3)

几天前我遇到了同样的问题,我通过列聚合选择了继承。基本概念不是有史以来发明的最干净或最美丽的解决方案,而是诀窍,并满足您的所有要求,除了一个:

  • 基类(和表)包含子类的所有字段用户。
  • 子类具有所需的所有字段。
  • 子类可以访问属于其他chields字段的字段。
  • 您可以使用父类或子类在Doctrine架构中自由创建关系。

这里失败的一件事是我用粗体字强调,但你可以很容易地解决它。您可以覆盖子类中的setter和getter,如果有人试图访问或修改属于Customer的Seller对象上的字段,那么您不允许它(抛出异常,返回false等等)。 )。