2011-03-23 64 views
4


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

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

我一直在寻找的继承方法:简单(好看不中用IMO),具体列聚集,甚至为“假类表继承”解决方法发现here

我真正需要的是“类表继承”,换句话说User映射到单独的表,其中包含所有共同的价值观,和子表定义地图只分离界定其具体列的表。

我在PHP 5.3 <放弃了完美 :),我真的不关心如何将它存储在数据库中,但我的对象模型需要有所有功能。

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

这就是我需要的。

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

查询基表也不错,但我可以看到这是最大的问题之一,它不是必须的。

我希望你能理解我的问题。任何意见将不胜感激,因为我真的不知道该怎么做。

回答

3

几天前我有同样的问题,我选择了列聚合的继承。基本概念是不是有史以来发明的清洁或最漂亮的解决方案,但是做的伎俩,并满足您的所有需求,除了一个:

  • 的基类(和表)拥有所有字段用户通过子类。
  • 孩子班有他们需要的所有领域。
  • 子类可以访问属于其他字段的字段。
  • 您可以使用父类或子类在您的Doctrine模式中自由创建关系。

这里失败的一件事是我用粗体字强调,但你可以很容易地处理它。你可以重写你的子类中的setter和getters,就像任何人试图访问或修改属于Customer的Seller对象上的字段,然后你不允许它(抛出异常,返回false等等。 )。

+0

谢谢。列聚合(又名单表继承)似乎是唯一的出路。我并不喜欢在实现细节上妥协的逻辑,但我真的认为这里没有别的选择 – ZolaKt 2011-03-23 22:43:40