Cześć
Mam problem z widgetem CGridView, a dokładniej z odwołaniem się do wartości kolumny z relacji wiele-do-wiele.
'value'=>'$data->groups->group'
Framework zwraca błąd:
Trying to get property of non-object
Brak kodu źródłowego
Gdy wywołam normalnie (nie przez wigdet);
$user = User::model()->findByPK('1'); $user->groups
Wynik jest poprawny - zwracana jest tablica obiektów group.
Męczę się w tym już kilka godzin i nie mogę dojść do ładu, dlatego proszę Was o pomoc.
Relacja jest zdefiniowana:
public function relations()
{
return array(
'groups' => array(self::MANY_MANY, 'Group', 'users_groups(id_user, id_group)'),
);
}
Metoda search:
public function search()
{
$criteria=new CDbCriteria;
$criteria->compare('login',$this->login,true);
$criteria->compare('name',$this->name,true);
$criteria->compare('surname',$this->surname,true);
$criteria->compare('email',$this->email,true);
$criteria->compare('lastActive',$this->lastActive,true);
$criteria->compare('active',$this->active);
$criteria->with = array('groups');
return new CActiveDataProvider(get_class($this), array(
'criteria'=>$criteria,
));
}
Widget:
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'user-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
.
.
.
array(
'filter'=>CHtml::listData(Group::model()->findAll(),'id','group'),
'header'=>'Grupy',
'name'=>'groups.group', //? nie wiem jak sie odwolac
'value'=>'$data->groups->group' // tu zwraca blad
),
.
.
.
),
)); ?>
Baza w zarysie ogółnym wygląda następująco:
Tabela users
id (PK) int(11)
login varchar(64)
passwd varchar(40)
name varchar(64)
surname varchar(64)
email varchar(64)
lastActive datetime
active tinyint(1)
Tabela users_groups
id_user (PK) int(11)
id_group (PK) smallint(6)
Tabela groups
id (PK) smallint(6)
group varchar(64)