CakePHP - 查找相关模型的条件

时间:2011-10-05 15:52:04

标签: cakephp

我有SubjectGroup,它有很多主题。

class SubjectGroup extends AppModel {

    public $hasMany = array(
        'Subject' => array('order' => 'Subject.name')
    );

}

class Subject extends AppModel {

    public $belongsTo = array('SubjectGroup');

}

我希望得到所有的SubjectGroups,并递归检索他们的Subjects,但只检查状态为2的Subjects。我无法弄清楚如何做到这一点。

$subjectGroups = $this->SubjectGroup->find('all', array(
    'conditions' => array('Subject.status !=' => 2),
    'order' => 'SubjectGroup.name'
));

警告(512):SQL错误:1054:'where子句'中的未知列'Subject.status'

注意:我已经读过我可以在模型关系定义中添加条件数组,但我不希望关系始终使用条件。有时我会想要检索状态为2的SubjectGroups和Subjects,有时候检查所有Subjects的SubjectGroups,无论其状态如何。

进步

在Ross的帮助下,我现在正在尝试使用Containable行为。到目前为止我有这个:

$this->SubjectGroup->find('all', array(
    'contain' => 'Subject.status != 2',
    'order' => 'SubjectGroup.name'
));

没有错误,但它会返回所有主题,甚至是status = 2的主题。

1 个答案:

答案 0 :(得分:2)

您正在做的是让Cake在status表中查找字段SubjectGroup。它不存在。

您真正想要做的是使用可包含的行为,并以这种方式访问​​status字段。

试试这个:

$this->SubjectGroup->Behaviors->attach('Containable');

$subjectGroups = $this->SubjectGroup->find('all', array(
    'contain'=>array('Subject'=>array(
                             'conditions' => array('Subject.status !=' => 2))
                    ),
    'order' => 'SubjectGroup.name'
    ));