处理CakePHP中的泛化/专业化?

时间:2014-08-04 21:48:47

标签: sql cakephp cakephp-2.0

如果我在这里使用错误的条款,我道歉(请随时更正我的帖子或评论)。显然SQL在CakePHP之外并不是非常复杂,但我想学习使用CakePHP处理这种情况的正确方法。


情况

我设置了泛化/专业化数据库。我在这里简化了它(并更改了名称以明确:

 Humans: id, first_name, last_name, hobby
 Parents: id, human_id, job
 Students: id, human_id, grade

问题:

  1. 我的关联应该是parents has_one humansstudents has_one humanshumans has_one parentshumans has_one students,对吗?我总是在与协会斗争。
  2. 如何使用Cake的约定搜索一般模型中包含的数据的一个专业化模型?那么,例如,我如何只搜索我的学生的特定名字?

2 个答案:

答案 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

或者使用多表继承支持进行模型继承的行为:

http://bakery.cakephp.org/articles/santino83/2011/02/19/behavior_for_model_inheritance_the_missing_feature

答案 1 :(得分:0)

回答你的问题1:

首先请注意,由于您描述的是关系数据库模式,而不是UML类图,因此您不会处理" associations",而是处理外键依赖性。

正如Jaaz Cole在评论中所建议的,表达一个表格层次结构humans(最好称之为peopleperson的复数形式){{1}通常将子表的主键声明为引用超级表的外键。}和parents。因此,您应该删除students列。

相关问题