好的,首先,我知道这在 1.2 中是不可能的,这就是为什么我正在寻找解决方法的原因。
不,不幸的是我不能使用 Doctrine 2,因为我的共享托管服务器停留在 PHP 5.2.16,管理员拒绝安装 PHP 5.3 支持。
所以,这是我的问题,基本的亲子问题:
假设我有一个基类 User
和子类 Customer
、Seller
、Admin
。
我一直在研究继承方法:简单(IMO 相当无用)、具体 和列聚合,甚至是一个解决方法找到“假类表继承”here .
我真正需要的是“class table inheritance”,换句话说User
映射到单独的表,其中包含所有共享值,子表定义映射来分隔仅定义其特定列的表。
我已经放弃 完美 :) 在 PHP<5.3 中,我真的不关心它如何存储在数据库中,但我的对象模型需要具有所有功能。
那么解决方法的最佳选择是什么?
这就是我需要的。
- 具有共享值(名称、用户名、密码、地址...)的基类定义
- 具有所有值(共享的及其特定的)的子类
- 子类应该只能看到它们的变量,而不是来自其他子类的变量(例如,客户不应该定义
workingHours
,这是卖家特定的值)< - 我必须能够在基类和单独的子类上形成关系,并且这些关系必须绑定(bind)到特定类(例如 User 类必须与 Address 类、Restourant 有关系类必须与 Orders 类有关系,Restourant 也必须定义 Address 关系...但 Admin 不能有 Orders 关系,因为他与订单无关)
查询基表也不错,但据我所知,这是最大的问题之一,不是必须的。
希望您能理解我的问题。任何建议将不胜感激,因为我真的不知道在这里做什么。
最佳答案
我前几天遇到了同样的问题,我选择了列聚合继承。基本概念不是有史以来发明的最干净或最漂亮的解决方案,但可以解决问题并满足您的所有要求,除了一个:
- 基类(和表)包含子类使用的所有字段。
- 子类具有他们需要的所有字段。
- 子类可以访问属于其他子类字段的字段。
- 您可以使用父类或子类在您的 Doctrine 模式中自由创建关系。
这里失败的一件事是我用粗体字体强调,但您可以轻松解决。您可以覆盖子类中的 setter 和 getter,例如,如果有人试图访问或修改属于客户的 Seller 对象上的字段,那么您将不允许它(抛出异常、返回 false 等)。 .).
关于php - Doctrine 1.2 类表继承解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5410790/