2011-10-06 43 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