我有SubjectGroup,它有很多主题。
class SubjectGroup extends AppModel {
public $hasMany = array(
'Subject' => array('order' => 'Subject.name')
);
}
class Subject extends AppModel {
public $belongsTo = array('SubjectGroup');
}
我想获取所有SubjectGroups,并递归检索他们的Subjects,但只检索状态为2的Subject。
$this->SubjectGroup->find('all', array(
'contain' => 'Subject.status != 2',
'order' => 'SubjectGroup.name'
));
没有错误,但它只返回所有主题,甚至是status = 2的主题。
答案 0 :(得分:0)
我认为您需要更明确地设置主题的条件。
$this->SubjectGroup->find(
'all',
array(
'contain' => array(
'Subject' => array(
'conditions' => array('NOT' => array('Subject.status' => 2)),
),
),
'order' => 'SubjectGroup.name'
)
);
答案 1 :(得分:0)
好吧,我终于发现了两个问题。我试图向控制器添加$actsAs
定义,以引入行为。我完全忘记了它不是模特。您必须在控制器操作中引入行为。
class SubjectGroupsController extends AppController {
public function index() {
$this->SubjectGroup->Behaviors->attach('Containable');
$subjectGroups = $this->SubjectGroup->find('all', array(
'contain' => 'Subject.status != 2',
'order' => 'SubjectGroup.name'
));
}
}
但无论如何,如果我使用以下基本语法:
,这种情况似乎才有效 'contain' => 'Subject.status != 2'
任何更复杂的东西似乎对我都不起作用:
// DOES NOT WORK
'contain' => array(
'Subject' => array(
'conditions' => array('NOT' => array('Subject.status' => 2)),
),
)