В настоящее время я использую cgridview (Yii) для отображения ланча и пользователей этого ланча. Пользователи хранятся в JSON в базе данных, и мне интересно, как отобразить это в декодированном виде в том же виде, что и остальная часть моей таблицы.
Код является:
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'lunch-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'id',
'date',
'cook',
'food',
'price',
'users',
array(
'class'=>'CButtonColumn',
),
),
)); ?>
Я думал о чем-то вроде этого, но тогда поле фильтра вверху исчезает …
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'lunch-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'id',
'date',
'cook',
'food',
'price',
array( 'header' =>'Users',
'type'=>'raw',
'value'=> 'implode(", ", CJSON::decode($data->users))',
),
array(
'class'=>'CButtonColumn',
),
),
)); ?>
Как я могу решить это?
Вы также можете добавить метод к модели
public function getDecodeUsers(){
return implode(",", CJSON::decode($this->users));
}
и использовать
array(
'name' => 'decodeUsers',
'header' => 'Users'
),
В коде отсутствует важное утверждение.
Пытаться —
array(
'name' => 'users',
'header' => 'Users',
'type'=> 'raw',
'value'=> 'implode(", ", CJSON::decode($data->users))',
),
Ключ ‘name’ необходим для фильтров.