2013-10-28 19 views
0

守護模式:(關係)數據提供商的關係沒有獲得所需的數據

'studentsGuardians' => array(self::HAS_MANY, 'StudentsGuardian', 'guardian_id'), 

學生模型關係:

'studentsGuardians' => array(self::HAS_MANY, 'StudentsGuardian', 'student_id'), 

學生監護人模型關係:

'guardian' => array(self::BELONGS_TO, 'Guardian', 'guardian_id'), 
         'student' => array(self::BELONGS_TO, 'Student', 'student_id'), 

現在控制器I想要選擇那些guardian_id = id的學生,但我的代碼選擇所有記錄而不進行過濾。我的代碼是

public function actionAssignGuardian($id) 
     { 

      $dataProvider = new CActiveDataProvider('Student', 
           array(
            'criteria' => array(
             'with'=>array('studentsGuardians', 
              array('criteria'=> 
              array('with'=>array('guardian','condition'=>' guardian_id=:id', 
               'params'=>array('id'=>$id))))), 

            ), 

            )); 



      $this->renderPartial('Pages/_assignGuardian', array(
       'dataProvider' => $dataProvider, 
       'id'=>$id, 
        )); 
     } 

請點我正確的方法,我怎麼會選擇那些學生的guardian_id =給定id的功能。我是yii的新手。 謝謝。

回答

0

添加此行到Student模型

'guardians' => array(self::HAS_MANY, 'Guardian', array('guardian_id'=>'guardian_id'),'through'=>'studentsGuardians'), 

然後,你可以做這樣的查詢

$dataProvider = new CActiveDataProvider('Student', 
      array(
       'criteria' => array(
        'with'=>array(
         'guardians' =>array(
          'condition'=>' guardian_id=:id', 
          'params'=>array('id'=>$id) 
         )))  
      )); 

(你也應該轉儲$id,以確保它是(上次關係線studentsGuardians下)有效值)

+0

在您定義的關係中,您是否寫過關係名「guardian」?與「通過」聲明。 –

+0

我的拼寫錯誤,應該是'學生守護者'(例如你在'學生'和'學生守護者'模型之間得到的關係名稱) –