我目前正在为包含许多不同用户类型的系统设计数据库。我的架构如下所示:
## Users
id INT
name VARCHAR(60)
email VARCHAR(60)
## Doctors
id INT
user_id INT
specialism VARCHAR(60)
qualification_id INT
基本上,Doctors表是Users表的子表。
现在,当我在Cake中创建我的模型和控制器和模型时,我认为创建User模型然后使用Doctor模型对其进行子类化是合乎逻辑的。但是当使用$ scaffold进行测试时,这似乎不起作用('有一个'且'属于'关系工作相对较好,但这种方式我不会是子类的Users类。)
对于以这种方式设计的数据库,您会建议采用什么方法?
答案 0 :(得分:4)
CakePHP不是为此而设计的。 CakePHP使用ActiveRecord模式。当模型与数据库表大致匹配时,此模式非常有用。但是当你想以你现在想要的方式设置你的模型时它会崩溃。对于您的设置,您需要类似Data Mapper模式(例如由Zend_Db实现)。
在您的情况下,我只是将User和Docter设置为具有hasOne / belongsTo关系的两个单独模型。使用Cake-ish流程要比对抗它要容易得多。
答案 1 :(得分:3)
您可以找到关于此问题的非常好的文章on the bakery。我还没有尝试过这个解决方案,但我肯定会这样做。
答案 2 :(得分:0)
我一直在考虑这个问题已经有一段时间了,我最终还是为它建立了一个解决方案。我想出的是一个可以在CakePHP上使用的新ORM。
它有点像CakePHP 3.0,其实体代表一个id / model,但它更先进,支持多表继承和单表继承。
存储库中包含一个powerpoint幻灯片,可进一步说明其工作原理。我发现它是一个非常强大的工具。
答案 3 :(得分:-1)
请参阅手册:http://book.cakephp.org/view/1001/Understanding-Models
你混淆了OO和关系数据模型。
对于以这种方式设计的数据库,您会建议采用什么方法?
上述手册中描述的方法。