Mysql 类表继承的CakePHP替代方案?
我想用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
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产品:之间的链接 每种产品及其各自的特点 类别
- 键入:这是将 定义产品类型(即。 戒指、鞋子、裤子等)
我希望这有帮助。快乐编码 我在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';