2014-12-10 1 views
0

У меня это очень простой стол, на мой взгляд, и я стараюсь, чтобы отобразить значение из присоединяемой таблицы:Отображение значения из таблицы присоединиться в Yii CgridView

$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'skills-grid', 
    'dataProvider'=>$model->searchWithStudentSuccessRate($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'=>'name', 
     ), 
     array(
      'name' => 'value', 
      'header' => Yii::t('MainTrans', 'Value'), 
      'value' => '$data->student_skills->value', 
     ), 
     array(
      'name' => 'successRate', 
      'header' => Yii::t('MainTrans', 'Success Rate'), 
      'value' => '$data->successRate."%"', 
     ), 
    ), 

)); 

И это функция поиска:

public function searchWithStudentSuccessRate($id) 
{ 
    // Warning: Please modify the following code to remove attributes that 
    // should not be searched. 

    $criteria=new CDbCriteria; 

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

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

    $criteria->select = array('IFNULL(CASE WHEN ROUND((student_skills.value/t.threshold)*100,0) > 100 THEN 100 ELSE ROUND((student_skills.value/t.threshold)*100,0) END,0) as successRate','*'); 

    $criteria->group = "t.name"; 
    $criteria->condition = 'student_skills.student_id = '.$id; 

    $criteria->compare('successRate',$this->successRate); 
    $criteria->compare('student_skills.value',$this->value); 


    return new CActiveDataProvider($this, array(
      'criteria'=>$criteria, 
      'pagination'=>array(
        'pageSize'=>25, 
      ), 
      'sort'=>array(
        'defaultOrder'=>array(
          'successRate'=>CSort::SORT_DESC, 
        ), 
        'attributes'=>array(
          'successRate'=>array(
            'asc'=>'successRate', 
            'desc'=>'successRate DESC', 
          ), 
          '*', 
        ), 
      ), 
    )); 
} 

Но я получаю сообщение об ошибке: «Попытка получить свойство не-объекта», когда я добавил value в мой CGridView.

Все работает нормально без значения столбца (колонки successRate и name в порядке). Соотношение должно быть хорошо. Ошибка, которую я получаю, означает, что значение не существует, но должно быть, потому что я сделал что-то подобное в своих других представлениях и там он работает.

Может ли кто-нибудь сказать, что случилось? Я уверен, что это нечто незначительное, но я немного борюсь с этой проблемой.

Благодаря

ответ

0

Это означает, что в некоторых условиях $data->student_skills является NULL. Попробуйте изменить:

'value' => '$data->student_skills->value', 

этому

'value' => 'empty($data->student_skills) ? null : $data->student_skills->value', 
+0

Спасибо Попробую, что – Nugy

+0

ли возможно, что не существует соответствующая student_skills запись в каждом случае? –