CakePHP - 在find()中不起作用的条件行为

时间:2011-10-06 10:48:42

标签: 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的Subject。

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

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

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)),
    ),
)