3

我想在CakePHP中创建一个Class Table Inheritance模型。类表继承CakePHP的替代?

我想有一个模型叫像ProductBase与表product_bases容纳所有基本信息,每一个产品应该有,像UPC,价格等

然后有具体的产品类型型号扩展该。例如ProductRing与表product_rings持有像ring_size,center_stone等

然后,如果我直接从ProductBase模型检索数据的特定环信息,已经拉它所有类型:

// pull all product types 
$this->ProductBase->find('all'); 

或者查找特定的只有类型:

// pull only Rings or descendants of the Ring type. 
$this->ProductRing->find('all'); 

在CakePHP中有这样的可能吗?如果不是,我应该怎么做呢?

什么是正确的蛋糕的方式做这样的事情?

回答

0

你指的是ARC relationship(或至少是它的一个变种)。 Cake不能即时处理这些类型的关系。这意味着你将不得不实现你的赢得逻辑来处理这个问题。

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

  • 产品:持有的 产品表。
  • 类别: 任何给定的产品可以属于的分类列表。
  • CATEGORIES_PRODUCTS: 每个产品与其各种 类别之间的链接。
  • TYPE:这是将 定义产品的

然后当你希望所有的产品,则查询的产品表的类型(即 环,鞋,裤子等)该标志。当你需要一部分产品(即戒指)时,你可以选择属于戒指类别的所有产品。

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

  1. 您可以建立多个表格以 保存产品信息。 当你拉一个给定类型的产品, ,你从它的表中拉出其伴侣信息 。
  2. 存储在文本 字段作为序列化的数据信息。所有的 信息都可以在 设置变量中定义,然后您可以使用 序列化数据映射到 信息。

我希望这会有所帮助。快乐的编码!

0

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

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

$entity = new Entity('SomeModel', $somePrimaryKeyValue); 
$foo = $entity->RelatedModel()->YetAnotherRelatedModel()->someProperty(); 

然而,注意到这一点很重要,即在霜,每一个实体对象是一系列的模型和主键的值是合并在一起的复方。至少在使用模型继承的情况下。这种化合物的样子:

[<'SomeConcreteModel', primaryKeyValueA>, <'IntermediaryModel', primaryKeyValueB>, <'BaseModel', primaryKeyValueC>] 

注意到,您可以通过任何给定的模型/ primaryKeyValue组合捡起这个实体是非常重要的。他们都指的是同一个实体。

使用这个,你也可以解决你的问题。您可以使用标准的CakePHP查找方法从基础模型中查找所需的所有主键值,也可以使用从其继承的查找方法模型,然后继续并创建实体。

您设置继承/扩展的链条在模型类简单地写:

public $extends = 'YourBaseModel'; 

另外,你还需要建立模型之间(hasOne或属于关联)一个普通的CakePHP的关系。它的工作原理与普通的OOP一样,具有从其基础继承的一系列模型。如果你只使用vanilla CakePHP,你会注意到这些模型是相关的,但是当你开始使用Cream界面时,所有实体都将model/primaryKeyValue对合并成一个单独的对象。

在我的github存储库中有一个powerpoint文件,可以解释大部分基本功能。

https://github.com/erobwen/Cream

也许我应该用叉子叉CakePHP的项目,并拉入请求,但现在它是一个独立的存储设备。请随时评论或参与开发“奶油”。另外,对于那些暗示最好只是“按照预期的方式使用CakePHP流程”的人,我会争论以下几点。通常的估计表明C程序比C++程序大2.5倍。鉴于分离这些语言的唯一特征是具有继承等的OOP,我们可以推断出缺少适当的OOP和继承等,需要程序员用重复代码等做150%的额外工作。因此,我会争辩说,一个合适的模型CakePHP中的继承机制非常需要。霜是对此的尝试。