2014-09-19 79 views
0

在我的項目中的一個視圖中,我需要顯示使用來自兩個表的數據的表,但其中一個是分區表。Php Yii與分界表的關係

我有兩個表用戶技能。這兩者之間的關係是多對多,所以我創建了聯結表StudentSkills

這juction表不只有id_userid_skill作爲平時也百分比值,它是對給定的ID獨一無二的 - 這就是爲什麼它在結表,即使你不應該把什麼都沒有作爲一種好的做法。

在所述視圖中的我需要從技能表和百分比StudentSkills一個certion用戶的結合表顯示包含名稱行表。

這是我的看法:

<?php 
    $this->widget('zii.widgets.grid.CGridView', array(
     'id'=>'skills-grid', 
     'dataProvider'=>$model->with('student_skills')->searchWithStudentId($id), 
     'template' => '{items}{pager}', 
     'cssFile'=>Yii::app()->request->baseUrl. '/themes/'. Yii::app()->theme->name.'/css/table.css', 
     'htmlOptions'=>array('class'=>'datagrid', 'style'=>'width:550px;'), 
     'columns'=>array(
      array(
       'name'=>Yii::t('MainTrans', 'Name'), 
       'value' => '$data->name', 
             ), 
      array(
       'name'=>'percentage', 
       'header' => Yii::t('MainTrans', 'Success rate %'), 
       'value' => '$data->student_skills->percentage', 
       ), 
      ), 
    )); 

?> 

這是我的搜索,在我的技能$模型關係:

public function relations() 
{ 
    return array(
     //the first two relations were generated by gii 
     'problems' => array(self::MANY_MANY, 'Problems', 'problem_skill(id_skill, id_problem)'), 
     'users' => array(self::MANY_MANY, 'User', 'student_skills(skill_id, student_id)'), 

     //this is what tired to do 
     'student_skills' => array(self::HAS_MANY, 'StudentSkills', 'skill_id'), 
    ); 
} 

public function searchWithStudentId($studentId) 
{ 
    // my custom search to find all records with certain user_id 

    $criteria=new CDbCriteria; 

    $criteria->compare('id',$this->id); 
    $criteria->compare('name',$this->name,true); 

    $criteria->with = array('student_skills'); 
    $criteria->together = true; 

    $criteria->compare('student_skills.student_id',$studentId); 

    return new CActiveDataProvider($this, array(
      'criteria'=>$criteria, 
      'pagination'=>array(
        'pageSize'=>25, 
      ), 
      'sort'=>array(
        'defaultOrder'=>array(
          'title'=>CSort::SORT_ASC 
        ) 
      ), 
    )); 
} 

當我試圖渲染頁面,我得到錯誤:嘗試得到非物件的財產。

我知道我的代碼出了問題,這很可能與關係有關,但我找不到任何東西。

有人可以幫助解決這個問題,而無需創建新表?

感謝

+0

你已經寫了''中的「數據提供程序」 => $模型 - > student_skills'與(「student_skills」 ) - > searchWithStudentId($ id),'然後在'searchWithStudentId()'函數中,您再次擁有'$ criteria-> with = array('student_skills');' – 2014-09-19 09:07:58

+0

嘗試更改''dataProvider'=> $ model - > with('student_skills') - > searchWithStudentId($ id),''dataProvider'=> $ model-> searchWithStudentId($ id),' – 2014-09-19 09:08:29

+0

@KunalDethe - 我在第二篇文章中試過了你的建議,不知道ķ。我真的不明白你想要說什麼第一條評論... – Nugy 2014-09-19 09:46:46

回答

0

的問題是,你正在使用HAS_MANY關係,這意味着每Skill模型已超過1 StudentSkill。你正在獲得一組student_skills,所以你需要對它做些什麼。例如獲得第一百分比陣列

$data->student_skills[0]->percentage 

或計算平均百分比爲某一技能

array_sum($data->student_skills)/count($data->student_skills) 
+0

謝謝。你的建議奏效,我用$ data-> student_skills [0] - >百分比 – Nugy 2014-09-19 09:52:39