php - Doctrine 1.2 类表继承解决方法?

标签 php inheritance orm doctrine single-table-inheritance


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

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

我一直在研究继承方法:简单(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/

相关文章:

python - python 中带有继承的类型注释

typescript - TypeORM:更新项目并返回

php - 诡异的 MySQL 代码逻辑

php - MySQL语法错误,使用PHP

javascript - 如何将div数据提交给MySQL

php - fatal error : Class 'PHPMailer' not found

Java,填充数组和继承

django - Django Model中的抽象继承,导致MAX递归深度错误

.net - 开始构建数据访问层。要考虑的事情?

Symfony2 Doctrine,设置一个多对多自引用关系的页面