CakePHP-查找相关模型的条件

CakePHP-查找相关模型的条件,cakephp,Cakephp,我有一个主题组,它有很多主题 class SubjectGroup extends AppModel { public $hasMany = array( 'Subject' => array('order' => 'Subject.name') ); } class Subject extends AppModel { public $belongsTo = array('SubjectGroup'); } 我想获取所有Subje

我有一个主题组,它有很多主题

class SubjectGroup extends AppModel {

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

}

class Subject extends AppModel {

    public $belongsTo = array('SubjectGroup');

}
我想获取所有SubjectGroup,并递归检索它们的主题,但只检索状态为2的主题。我不知道该怎么做

$subjectGroups = $this->SubjectGroup->find('all', array(
    'conditions' => array('Subject.status !=' => 2),
    'order' => 'SubjectGroup.name'
));
警告(512):SQL错误:1054:where子句中的未知列“Subject.status”

注意:我已经读到可以将条件数组添加到模型关系定义中,但我不希望关系总是使用条件。有时我只想检索状态为2的主题组和主题,有时检索状态为2的所有主题的主题组,而不管它们的状态如何

进步

在Ross的帮助下,我现在尝试使用可控制行为。到目前为止,我有:

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

没有错误,但它返回所有主题,即使是状态为2的主题。

您要做的是让Cake在
SubjectGroup
表中查找
状态
字段。它不存在

您真正想要做的是使用containable行为,并以这种方式访问
状态
字段

试试这个:

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

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

是的,Containable看起来像我需要的,但是你的代码不起作用。根据该手册,它有一个示例
$this->Post->find('all',array('contain'=>'Comment.author=“Daniel”)所以我尝试将其修改为
$this->SubjectGroup->find('all',array('contain'=>'Subject.status!=2','order'=>'SubjectGroup.name')但这不起作用。你能发布你的关联吗?还有什么不起作用?错误,意外数据?请参阅我更新的主要帖子。没有错误,它只返回所有主题,因此可包含的行为似乎没有任何作用。不应接受此答案,因为它返回所有主题组,但每个主题组仅包含状态为的主题!=是的!我同意Vanja D.同样的问题。你解决你的问题了吗?可能是重复的