2013-07-29 6 views
0

Я искал ответ здесь, но я не нашел одного конкретного для моей проблемы.Yii CGridview с реляционными моделями

Я считаю, что неправильно установил отношения между моими моделями ... У меня есть CGridView, который использует модель, одно из этих полей - это чужой идентификатор, я хочу использовать этот чужой идентификатор, чтобы захватить другое поле в рамках модели. (например, модель вопроса содержит внешний ключ 'tag1', я хочу использовать 'tag1', чтобы найти это поле 'name' в таблице Tag).

Посмотреть

<?php 
$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$questions->search(), 
    'filter' => $questions, 
    'columns' => array(
     array('class'=>'CCheckBoxColumn'), 
     'text', 
     'tag1', 
     array('header' => 'Tag 1', 'value' => '$questions->tag1->text'), 
     'na', 
     'cca', 
    ), 
)); 
?> 

Модель

public function relations() 
{ 
    // NOTE: you may need to adjust the relation name and the related 
    // class name for the relations automatically generated below. 
    return array(
     'tag1' => array(self::HAS_ONE, 'Tags', 'id'), 
    ); 
} 
+0

Какая ошибка вы получаете? – Ninad

ответ

0

Попробуйте Давать это соотношение

public function relations() { 
     return array(
      'tags1'=>array(self::BELONGS_TO, 'Tags', 'id'),  
     ); 
    } 
0

Вы просто переменную неправильно, каждая строка использует DataProvider и сохраняется в переменной $data поэтому вам просто нужно сделать так:

<?php 
$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$questions->search(), 
    'filter' => $questions, 
    'columns' => array(
     array('class'=>'CCheckBoxColumn'), 
     'text', 
     'tag1', 
     array('header' => 'Tag 1', 'value' => '$data->tag1->text'), 
     'tag1.text', //if you relation is setup correct you can also do this 
     'na', 
     'cca', 
    ), 
)); 
?>