CakePHP属于多个模型?

时间:2012-04-11 17:18:49

标签: php cakephp associations belongs-to

如果这个问题已在其他地方得到解答,我提前道歉;我搜索了现有答案的高低不一,但却空了。也许我看错了关键词。

我有三个模型,其中两个(学生和导师)与共同模型(约会)有$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是否有内置函数,我缺少这些函数来获取相关信息,或者这是否需要在某处进行缩写?

1 个答案:

答案 0 :(得分:3)

您应该考虑使用Containable。如果您不熟悉它,它是Behavior,您可以将其附加到模型并使用它来精确定义哪些关联模型将包含在find中,尽可能多的模型和深度如你所愿。

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

var $actsAs = array('Containable');

然后在控制器中:

$this->Student->find('first', array(
    'conditions' => ...,
    'contain' => array('Appointment' => 'Tutor'),
    ...
));