据我了解,cakephp
不支持数据库继承关系。但是,我想创建一个具有不同类型用户的数据库。
在这种情况下,有三种类型的用户:Seller
,Customer
和Administrator
。每个用户都应该拥有基本的用户信息,例如password
,username
等
但是,每种类型的用户都有自己独特的数据集。例如,卖家可能有inventory_id,而客户可能有delivery_address等。
我一直在考虑在不破坏cakephp
约定的情况下为此问题创建变通方法。我打算在User表中创建另外三个外键admin_id
,seller_id
和customer_id
,它们链接到其他表。但是,知道这是一个IS-A
关系而不是HAS-A
,我必须确保两个id是NULL值。因此,这种解决方法对我来说似乎很难看。
还有其他更简单,更好的方法吗?
答案 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,但它更高级,支持多表继承和单表继承。