3

如果此问题已在其他地方得到解答,我提前道歉;我搜索了一个现有的答案,但结果是空的。也许我正在寻找错误的关键字。

我有三个模型,其中两个(学生和导师)与一个与其他模型都有$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”),我需要能够列出他们即将到来的约会的日期以及该约会的导师姓名。因此,我需要在查看 Student 模型时从 Tutor 模型(名称)访问数据。现在我只能通过$this->Student->query()拉取相关的导师记录来完成此操作,但这会导致学生的信息在结果数组中重复。

所有的$hasMany$belongsTo关系都工作得很好。CakePHP 是否有一个我缺少的内置函数来获取相关信息,或者这需要在某个地方直接完成吗?

4

1 回答 1

3

您应该考虑使用Containable。如果您不熟悉它,它是一种行为,您可以将其附加到模型并使用它来精确定义要包含在 a 中的关联模型,模型的数量find和深度都可以。

我总是将它用于所有模型,方法是在 AppModel 中设置它:

var $actsAs = array('Containable');

然后在控制器中:

$this->Student->find('first', array(
    'conditions' => ...,
    'contain' => array('Appointment' => 'Tutor'),
    ...
));
于 2012-04-11T17:46:27.433 回答