Cakephp解决模型继承关系的方法

时间:2013-01-01 14:50:14

标签: cakephp

据我了解,cakephp不支持数据库继承关系。但是,我想创建一个具有不同类型用户的数据库。

在这种情况下,有三种类型的用户:SellerCustomerAdministrator。每个用户都应该拥有基本的用户信息,例如passwordusername等 但是,每种类型的用户都有自己独特的数据集。例如,卖家可能有inventory_id,而客户可能有delivery_address等。

我一直在考虑在不破坏cakephp约定的情况下为此问题创建变通方法。我打算在User表中创建另外三个外键admin_idseller_idcustomer_id,它们链接到其他表。但是,知道这是一个IS-A关系而不是HAS-A,我必须确保两个id是NULL值。因此,这种解决方法对我来说似乎很难看。

还有其他更简单,更好的方法吗?

2 个答案:

答案 0 :(得分:1)

对于这种类型的数据库结构,我可能会考虑采用实体 - 属性 - 值模型。这意味着您的客户可能有一个delivery_address,而您的用户可能有一个inventory_id,但就您在Cake中的关系而言,您的用户和客户都只有一个attribute_id ...然后您可以创建另一个存储内容的表< em> type 属性可用。

它是最简单的形式,您的用户和客户将通过hasMany(可能)关系附加到* attribute_lookup *或* attribute_link *表。 attribute_lookup / link表将通过belongsTo / hasOne关系连接到实际的Attribute Type和Attribute Value模型。

如果你正确地规范化你的表,你可以很好地遵守Cake关系约定。

您可以阅读有关EAV here的更多信息。

答案 1 :(得分:1)

我一直在考虑这个问题已经有一段时间了,我最终还是为它建立了一个解决方案。我想出的是一个可以在CakePHP上使用的新ORM。

它有点像CakePHP 3.0,其实体代表一个id / model,但它更高级,支持多表继承和单表继承。

检查出来:https://github.com/erobwen/Cream