2011-10-06 28 views
0

我有SubjectGroup,其中有许多主题。CakePHP - 条件行为不起作用find()

class SubjectGroup extends AppModel { 

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

} 

class Subject extends AppModel { 

    public $belongsTo = array('SubjectGroup'); 

} 

我想所有SubjectGroups,并递归检索他们的主题,但只有有2

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

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

回答

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

你怎么没有使用$ actsAs给模型在subject_group.php和subject.php模型文件中的可容忍的行为,或者更好的还是在app_model.php中? – ianmjones

0

我认为你需要更明确地设置主题的条件。

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

还没有工作。它只是检索所有主题的同样的东西。 – BadHorsie