Mysql 类表继承的CakePHP替代方案?

Mysql 类表继承的CakePHP替代方案?,mysql,cakephp,cakephp-1.3,cakephp-model,class-table-inheritance,Mysql,Cakephp,Cakephp 1.3,Cakephp Model,Class Table Inheritance,我想用CakePHP创建一个模型 我希望有一个名为ProductBase的模型,其中包含product\u base表,以保存每个产品应有的所有基本信息,如upc、价格等 然后让特定的产品类型模型进行扩展。例如,ProductRing与表product\u rings一起保存特定的戒指信息,如戒指大小、中心石等 然后,如果我直接从ProductBase模型检索数据,让它拉取所有类型: // pull all product types $this->ProductBase->find

我想用CakePHP创建一个模型

我希望有一个名为
ProductBase
的模型,其中包含
product\u base
表,以保存每个产品应有的所有基本信息,如upc、价格等

然后让特定的产品类型模型进行扩展。例如,
ProductRing
与表
product\u rings
一起保存特定的戒指信息,如戒指大小、中心石等

然后,如果我直接从ProductBase模型检索数据,让它拉取所有类型:

// pull all product types
$this->ProductBase->find('all'); 
或仅查找特定类型:

// pull only Rings or descendants of the Ring type.
$this->ProductRing->find('all'); 
在CakePHP中有这样的功能吗?如果没有,我应该怎么做

这样做的正确方式是什么?

您指的是一种(或至少是它的一种变体)。Cake不会动态处理这些类型的关系。这意味着您必须实现自己的逻辑来处理此问题

另一种选择是对产品进行分类。如果产品可以分为多个类别,那么您需要为每个产品指定一个HABTM类别。否则,可以使用类别列。我怀疑你要找的是一个HABTM

  • 产品:包含 产品
  • 类别:类别列表 任何给定的产品都可以属于
  • 类别\u产品:之间的链接 每种产品及其各自的特点 类别
  • 键入:这是将 定义产品类型(即。 戒指、鞋子、裤子等)
然后,当需要所有产品时,查询products表。当您需要产品(即戒指)的一部分时,请选择属于戒指类别的所有产品

现在,我们需要解决有关产品的信息。例如,并非所有信息都适用于所有产品。有很多方法可以做到这一点

  • 您可以构建多个表来 保存产品信息。什么时候 你拉一个给定类型的产品, 你拉它的同伴信息 从桌子上
  • 将信息存储在文本中 字段作为序列化数据。所有的 信息可以在 设置变量,然后您可以使用 要映射到的序列化数据 信息

  • 我希望这有帮助。快乐编码

    我在CakePHP工作了两年,没有找到令人满意的解决方案,所以有一天我为它写了一个解决方案。我构建了一种新的ORM,它作为CakePHP2.x之上的插件工作。我叫它“奶油”

    它的工作原理类似于CakePHP 3.0的实体,但另外还支持多表继承。它还支持非常方便的数据结构浏览(延迟加载),并且非常易于配置。在我看来,它比CakePHP3.0现在提供的功能更强大。数据结构浏览的工作原理如下:

    $entity = new Entity('SomeModel', $somePrimaryKeyValue);
    $foo = $entity->RelatedModel()->YetAnotherRelatedModel()->someProperty(); 
    
    但是,需要注意的是,在Cream中,每个实体对象都是一系列模型和主键值的计算机,这些模型和主键值合并在一起。至少在使用模型继承的情况下。这种化合物看起来像:

    [<'SomeConcreteModel', primaryKeyValueA>, <'IntermediaryModel', primaryKeyValueB>, <'BaseModel', primaryKeyValueC>]
    
    此外,您还需要在模型(hasOne或belongsTo)之间建立一个普通的CakePHP关系。它的工作原理与普通的面向对象编程(OOP)一样,有一系列从基础继承的模型。如果您只使用vanilla CakePHP,您会注意到这些模型是相关的,但是当您开始使用Cream接口时,所有实体将模型/primaryKeyValue对合并到一个对象中

    在我的github存储库中,有一个powerpoint文件解释了大多数基本功能

    也许我应该分叉CakePHP项目并发出一个pull请求,但现在它是一个单独的存储库。请随时评论或参与开发“奶油”

    此外,对于那些建议“按照预期使用CakePHP流”的人,我将提出以下观点。常见的估计表明C程序比C++程序大2.5倍。考虑到区分这些语言的唯一功能是带有继承等的OOP,我们可以推断,缺少带有继承等的适当OOP需要程序员对重复代码等做150%的额外工作。因此,我认为非常需要CakePHP中的适当模型继承机制。奶油就是一种尝试

    public $extends = 'YourBaseModel';