我有三个模型,其中两个(学生和导师)与共同模型(约会)有$hasMany
关系,与其他两个模型都有$belongsTo
关系。确切的模型如下......
学生有很多约会......
class Student extends AppModel {
var $hasMany = array (
'Appointment' => array (
'foreignKey' => 'student_id'
)
);
导师有很多约会......
class Tutor extends AppModel {
var $hasMany = array (
'Appointment' => array (
"foreignKey" => 'tutor_id'
)
);
约会属于学生和导师...
class Appointment extends AppModel {
var $belongsTo = array (
'Student' => array (
'foreignKey' => 'student_id'
),
'Tutor' => array (
'foreignKey' => 'tutor_id'
)
);
在查看学生的记录时(例如'app / student / view / 4'),我需要能够列出他们即将到来的约会的日期以及该约会的导师姓名。因此,我需要在查看学生模型时访问Tutor模型(名称)中的数据。现在我只能使用$this->Student->query()
来完成此操作来提取相关的教师记录,但这会导致学生的信息在结果数组中重复。
所有$hasMany
和$belongsTo
关系都运行正常。 CakePHP是否有内置函数,我缺少这些函数来获取相关信息,或者这是否需要在某处进行缩写?
答案 0 :(得分:3)
您应该考虑使用Containable。如果您不熟悉它,它是Behavior,您可以将其附加到模型并使用它来精确定义哪些关联模型将包含在find
中,尽可能多的模型和深度如你所愿。
我总是在所有模型中使用它,方法是在AppModel中设置它:
var $actsAs = array('Containable');
然后在控制器中:
$this->Student->find('first', array(
'conditions' => ...,
'contain' => array('Appointment' => 'Tutor'),
...
));