CakePHP: Translating database 'inheritance' into app models/controllers
I am currently designing a database for a system containing a number of different user types. My schema look like this:
## Users
id INT
name VARCHAR(60)
email VARCHAR(60)
## Doctors
id INT
user_id INT
specialism VARCHAR(60)
qualificat开发者_开发问答ion_id INT
Essentially, the Doctors table is a child of the Users table.
Now, when i'm creating my models and controllers and models in Cake, I thought it was logical to create a User model and then subclass it with a Doctor model. But this doesn't seem to work when testing with the $scaffold (the 'has one' and 'belongs to' relationships work relatively well, but this way I would not be subclassing the Users classes).
What approach would you suggest for a database designed in this way?
CakePHP is not designed for this. CakePHP uses the ActiveRecord pattern. This pattern works great when your models roughly match up with your database tables. But it breaks down when you want to set up your models in the way you are trying to do now. For your setup, you'd need something like a Data Mapper pattern (as implemented by e.g. Zend_Db).
In your case, I would simply set up User and Docter as two separate models with a hasOne/belongsTo relation. It will be far easier to go with the Cake-ish flow than to fight it.
You can find a very good article about this issue on the bakery. I haven't tried that solution yet but I will do it for sure.
I have been thinking about this problem for some time now, and I have eventually got around to build a solution for it. What I came up with is a new ORM that can be used on top of CakePHP.
It sort of works as CakePHP 3.0 with entities that represent an id/model, but it is much more advanced and supports multi table inheritance and single table inheritance.
Check it out: erobwen/Cream on github
There is a powerpoint slide included in the repository that give further explanations of how it works. I find it to be a pretty powerful tool.
See this in the manual: http://book.cakephp.org/view/1001/Understanding-Models
You're confusing OO and relational datamodelling.
What approach would you suggest for a database designed in this way?
The approach described in the manual linked to above.
精彩评论