CakePHP:将数据库'继承'转换为应用程序模型/控制器

时间:2011-02-18 08:47:33

标签: php mysql inheritance cakephp rdbms

我目前正在为包含许多不同用户类型的系统设计数据库。我的架构如下所示:

## 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类。)

对于以这种方式设计的数据库,您会建议采用什么方法?

4 个答案:

答案 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,但它更先进,支持多表继承和单表继承。

检查出来:erobwen/Cream on github

存储库中包含一个powerpoint幻灯片,可进一步说明其工作原理。我发现它是一个非常强大的工具。

答案 3 :(得分:-1)

请参阅手册:http://book.cakephp.org/view/1001/Understanding-Models

你混淆了OO和关系数据模型。

  

对于以这种方式设计的数据库,您会建议采用什么方法?

上述手册中描述的方法。