2014-09-15 2 views
0

На данный момент я пользуюсь cgridview (Yii), чтобы показать обед и пользователей этого обеда. Пользователи хранятся в JSON в базе данных, и мне интересно, как отобразить это декодированное с тем же представлением, что и остальная часть моей таблицы.JSON Decode in Cgridview

Код:

<?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', 
      ), 
     ), 
     )); ?> 

Как я могу решить это?

ответ

0

Вы также можете добавить метод для моделирования

public function getDecodeUsers(){ 
    return implode(",", CJSON::decode($this->users)); 
} 

и использовать

array(
    'name' => 'decodeUsers', 
    'header' => 'Users' 
), 
0

В коде отсутствует важное заявление.

Try

-

array(
    'name' => 'users', 
    'header' => 'Users', 
    'type'=> 'raw', 
    'value'=> 'implode(", ", CJSON::decode($data->users))', 
), 

Ключ 'имя' необходимо для фильтров.