如果我在这里使用错误的条款,我道歉(请随时更正我的帖子或评论)。显然SQL在CakePHP之外并不是非常复杂,但我想学习使用CakePHP处理这种情况的正确方法。
情况
我设置了泛化/专业化数据库。我在这里简化了它(并更改了名称以明确:
Humans: id, first_name, last_name, hobby
Parents: id, human_id, job
Students: id, human_id, grade
问题:
parents has_one humans
,students has_one humans
,humans has_one parents
和humans has_one students
,对吗?我总是在与协会斗争。答案 0 :(得分:2)
回答问题1:
您的命名是正确的(旁边"父母"导致型号名称"父级",这是不允许的,因为它是PHP关键字)。
以下关联应该足够: 父母属于人类,学生属于人类
回答问题2:
在学生控制器中尝试此操作(在学生模型中创建关联后):
$this->Student->find('all', array('conditions' => array('Human.first_name' => 'AnyFirstNameYouWant')));
否则看看:
CakePHP不支持Multi-Table- / Joined-Table-Inheritance。
你可以试试Containable-Behavior:
http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html
或者使用多表继承支持进行模型继承的行为:
答案 1 :(得分:0)
回答你的问题1:
首先请注意,由于您描述的是关系数据库模式,而不是UML类图,因此您不会处理" associations",而是处理外键依赖性。
正如Jaaz Cole在评论中所建议的,表达一个表格层次结构humans
(最好称之为people
为person
的复数形式){{1}通常将子表的主键声明为引用超级表的外键。}和parents
。因此,您应该删除students
列。